Как да променя динамично низа за администриране на сайта в администратора на 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