如何在Django的管理员中动态更改“站点管理”字符串?

时间:2012-06-27 11:27:11

标签: django admin

我想通过管理员中的自定义字符串动态替换“网站管理”。 我已经覆盖了“base.html”用于其他目的,但现在我需要将一个变量传递给此模板以替换

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

我从this question看到,通过覆盖changelist_view并在模型管理员中添加extra_context,可以将变量传递到更改列表模板,但是如何通过管理员“主要”页面的额外上下文“?

2 个答案:

答案 0 :(得分:5)

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,最好使用context processor或自定义一些模板标记。

答案 1 :(得分:1)

您覆盖“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 %}