4

我想用我的管理员中的自定义字符串动态替换“站点管理”。我已经出于其他目的重写了“base.html”,但是现在我需要将一个变量传递给这个模板来{{ title }}替换

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

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

4

2 回答 2

6

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在所有管理页面中都有,最好使用上下文处理器或如果可以自定义一些模板标签。

于 2012-06-27T12:16:29.933 回答
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 %}
于 2012-06-27T11:30:35.497 回答