2012-06-27 133 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我沒有仔細閱讀這個問題:/ –