Как динамически изменить строку администрирования сайта в админке Django?

Я хочу динамически заменить «Администрирование сайта» пользовательской строкой в ​​моем админке. Я уже переопределил "base.html" для какой-то другой цели, но теперь мне нужно передать переменную в этот шаблон, чтобы заменить {{ title }} в

{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}

Я видел из такой вопрос, что переменную можно передать в шаблон списка изменений, переопределив changelist_view и добавив extra_context в админку модели, но как я могу передать лишний контекст на "главную" страницу админки"?


person jul    schedule 27.06.2012    source источник


Ответы (2)


Представление index() находится внутри класса django.contrib.admin.site.AdminSite и также поддерживает extra_context, вы можете переопределить его, например:

def index(self, *args, **kwargs):
     return admin.site.__class__.index(self, extra_context={'title':'customized title'}, *args, **kwargs)
admin.site.index = index.__get__(admin.site, admin.site.__class__)

Также вы можете напрямую переопределить AdminSite и использовать customized_site вместо admin.site:

class CustomizedAdminSite(AdminSite):
    def index(self, *args, **kwargs):
        return super(CustomizedAdminSite, self).index(extra_context={...}, *args, **kwargs)
customized_site = CustomizedAdminSite()

Если вы хотите иметь title на всех страницах администратора, лучше использовать контекстный процессор или настройте тег шаблона, если можете.

person okm    schedule 27.06.2012
comment
Как я могу переопределить index() в моем admin.py? - person jul; 27.06.2012
comment
@jul есть способы сделать это, просто обновил ответ, добавив некоторые. - person okm; 27.06.2012
comment
В конце концов, я использую процессор контекста. Спасибо! - person jul; 27.06.2012
comment
@okm Разве передача аргумента после kwarg не является незаконной? - person glarrain; 10.07.2013

Вы переопределяете шаблон «admin/base_site.html»:

{% extends "admin/base.html" %}
{% load i18n %}

{% block title %} {{ title }} | {% trans 'YOUR TITLE HERE' %} {% endblock %}

{% block branding %}
<h1 id="site-name">{% trans 'STUFF HERE PERHAPS' %} </h1>
{% endblock %}

{% block nav-global %}

{% endblock %}
person Josh Smeaton    schedule 27.06.2012