Add context to every Django Admin page

微笑、不失礼 提交于 2021-02-07 12:16:30

问题


How do I add extra context to all admin webpages?

I use default Django Admin for my admin part of a site.

Here is an url entry for admin:

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

And my apps register their standard view models using:

admin.site.register(Tag, TagAdmin)

My problem, is that I want to display an extra field in admin template header bar and I have no idea how to add this extra context.

My first bet was adding it in url patterns like below:

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

But that gives an error:

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

change_view() got an unexpected keyword argument 'mycontext'

Can you give any suggestion? I really do not want to modify every AdminModel class I have to insert this context, as I need it on every admin page.

Thanks.


回答1:


Found the solution, url registration has to be:

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

Its a context dictionary inside of a dictionary with 'extra_context' as a key.




回答2:


Another technique, more complex but allows different context per request (probably unavailable at OP time):

my_project/admin.py (create if missing)

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


class MyAdminConfig(AdminConfig):
    default_site = 'my_project.apps.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.apps.MyAdminConfig',  # replaces 'django.contrib.admin'
    ...

The replace / extend admin class code is taken from the official docs except this is all in one file.



来源:https://stackoverflow.com/questions/39476439/add-context-to-every-django-admin-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!