ala*_*rev 6 python django django-admin django-views
如何为所有管理网页添加额外的上下文?
我使用默认的Django Admin作为网站的管理员部分.
这是admin的url条目:
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
我的应用程序使用以下方式注册标准视图模型
admin.site.register(Tag, TagAdmin)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想在管理模板标题栏中显示一个额外的字段,我不知道如何添加这个额外的上下文.
我的第一个赌注是将其添加到以下网址模式中:
urlpatterns = [
url(r'^admin/', admin.site.urls, {'mycontext': '123'}),
]
Run Code Online (Sandbox Code Playgroud)
但这给出了一个错误:
TypeError at /admin/tickets/event/4/change/
change_view() got an unexpected keyword argument 'mycontext'
Run Code Online (Sandbox Code Playgroud)
你能提出任何建议吗?我真的不想修改我必须插入此上下文的每个AdminModel类,因为我需要在每个管理页面上.
谢谢.
找到解决办法,url注册必须是:
urlpatterns = [
url(r'^admin/', admin.site.urls, {'extra_context': {'mycontext': '123'}}),
]
Run Code Online (Sandbox Code Playgroud)
它是字典内的上下文字典,'extra_context'作为键。
另一种技术更复杂,但允许每个请求使用不同的上下文(可能在操作时不可用):
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
Run Code Online (Sandbox Code Playgroud)
settings.py
INSTALLED_APPS = [
...
'my_project.admin.MyAdminConfig', # replaces 'django.contrib.admin'
...
Run Code Online (Sandbox Code Playgroud)
替换/扩展管理类代码取自官方文档,只不过这些代码都在一个文件中。
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |