2012-06-27 164 views
3

我想通过我的管理中的自定义字符串动态替换“网站管理”。 我已经重写“base.html文件”用于其他目的,但现在我需要一个变量传递给这个模板在如何在Django的管理中动态地改变“网站管理”字符串?

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

我从this question一个变量可以传递看出,以取代{{ title }}通过重写changelist_view并在模型管理中添加extra_context,但是如何将额外的上下文传递到管理员的“主”页面?

回答

4

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或者如果可以的话自定义一些模板标签。

+0

如何覆盖我的admin.py中的index()? – jul

+0

@jul有办法做到这一点,只是通过增加一些更新答案。 – okm

+0

最后我使用上下文处理器。谢谢! – jul

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 %} 
+0

我需要动态地做到这一点。 – jul

+0

@jul我没有仔细阅读这个问题:/ –