首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向每个Django Admin页面添加上下文

向每个Django Admin页面添加上下文
EN

Stack Overflow用户
提问于 2016-09-14 02:08:17
回答 2查看 3.3K关注 0票数 13

如何为所有管理网页添加额外的上下文?

我使用默认的Django Admin作为我网站的管理部分。

下面是admin的url条目:

代码语言:javascript
复制
urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

我的应用程序使用以下命令注册其标准视图模型:

代码语言:javascript
复制
admin.site.register(Tag, TagAdmin)

我的问题是,我想要在管理模板标题栏中显示一个额外的字段,我不知道如何添加这个额外的上下文。

我的第一个赌注是将其添加到url模式中,如下所示:

代码语言:javascript
复制
urlpatterns = [
    url(r'^admin/', admin.site.urls, {'mycontext': '123'}),
]

但这会给出一个错误:

代码语言:javascript
复制
TypeError at /admin/tickets/event/4/change/

change_view() got an unexpected keyword argument 'mycontext'

你能给我一些建议吗?我真的不想修改每个AdminModel类,我必须插入此上下文,因为我需要它在每个管理页面。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-09-14 02:25:15

找到了解决方案,url注册必须是:

代码语言:javascript
复制
urlpatterns = [
    url(r'^admin/', admin.site.urls, {'extra_context': {'mycontext': '123'}}),
]

它是一个以'extra_context'为关键字的字典中的上下文字典。

票数 7
EN

Stack Overflow用户

发布于 2019-09-08 02:25:45

另一种技术,更复杂,但允许每个请求不同的上下文(可能在操作时不可用):

my_project/admin.py (如果缺少,则创建)

代码语言:javascript
复制
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

代码语言:javascript
复制
INSTALLED_APPS = [
    ...
    'my_project.admin.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...

替换/扩展管理类代码取自the official docs,除非这都在一个文件中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39476439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档