如何在Django Admin中更改站点标题、站点头部和索引标题?
24 个回答
258
有一个简单的方法可以设置管理员网站的标题——在 urls.py
文件中把它赋值给当前的管理员实例,像这样:
admin.site.site_header = 'My admin'
或者,你也可以在一个单独的方法里实现一些设置标题的技巧。
admin.site.site_header = get_admin_header()
所以,在简单的情况下,其实不需要去创建一个 AdminSite
的子类。
424
从Django 1.7开始,你不需要再去重写模板了。现在你可以在自定义的AdminSite中实现一些属性,比如site_header、site_title
和index_title
,这样就能轻松更改管理页面的标题和头部文字。你只需要创建一个AdminSite的子类,并把你的实例连接到你的URL配置中:
admin.py:
from django.contrib.admin import AdminSite
from django.utils.translation import ugettext_lazy
class MyAdminSite(AdminSite):
# Text to put at the end of each page's <title>.
site_title = ugettext_lazy('My site admin')
# Text to put in each page's <h1> (and above login form).
site_header = ugettext_lazy('My administration')
# Text to put at the top of the admin index page.
index_title = ugettext_lazy('Site administration')
admin_site = MyAdminSite()
urls.py:
from django.conf.urls import patterns, include
from myproject.admin import admin_site
urlpatterns = patterns('',
(r'^myadmin/', include(admin_site.urls)),
)
更新: 正如oxfn所指出的,你可以直接在你的urls.py
或admin.py
中设置site_header
,而不需要去子类化AdminSite
:
admin.site.site_header = 'My administration'
147
更新: 如果你使用的是Django 1.7及以上版本,请查看下面的回答。
2011年的原始回答:
要实现这个功能,你需要创建自己的管理员 base_site.html
模板。最简单的方法是创建一个文件:
/<projectdir>/templates/admin/base_site.html
这个文件应该是原始的 base_site.html
的复制品,只不过要把你的自定义标题放进去:
{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}
为了让这个工作正常,你需要在你的项目中设置正确的配置,特别是在 settings.py
文件中:
- 确保
/projectdir/templates/
被添加到TEMPLATE_DIRS
中。 - 确保
django.template.loaders.filesystem.Loader
被添加到TEMPLATE_LOADERS
中。