簡體   English   中英

為每個 Django 管理頁面添加上下文

[英]Add context to every Django Admin page

如何向所有管理網頁添加額外的上下文?

我使用默認的 Django Admin 作為站點的管理部分。

這是管理員的 url 條目:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

我的應用程序使用以下方法注冊其標准視圖模型:

admin.site.register(Tag, TagAdmin)

我的問題是,我想在管理模板標題欄中顯示一個額外的字段,但我不知道如何添加這個額外的上下文。

我的第一個賭注是將它添加到 url 模式中,如下所示:

urlpatterns = [
    url(r'^admin/', admin.site.urls, {'mycontext': '123'}),
]

但這給出了一個錯誤:

TypeError at /admin/tickets/event/4/change/

change_view() got an unexpected keyword argument 'mycontext'

你能給出任何建議嗎? 我真的不想修改我必須插入此上下文的每個 AdminModel 類,因為我在每個管理頁面上都需要它。

謝謝。

找到解決辦法,url注冊必須是:

urlpatterns = [
    url(r'^admin/', admin.site.urls, {'extra_context': {'mycontext': '123'}}),
]

它是字典內的上下文字典,以'extra_context'為鍵。

另一種技術,更復雜,但每個請求允許不同的上下文(可能在 OP 時間不可用):

my_project/admin.py (如果缺少則創建)

from django.contrib import admin
from django.contrib.admin.apps import AdminConfig


class MyAdminConfig(AdminConfig):
    default_site = 'my_project.admin.MyAdminSite'


class MyAdminSite(admin.AdminSite):
    def each_context(self, request):
        context = super().each_context(request)
        context.update({
            "whatever", "this is",
            "just a": "dict",
        })
        return context

settings.py

INSTALLED_APPS = [
    ...
    'my_project.admin.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...

替換/擴展管理類代碼取自官方文檔,除了這些都在一個文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM