如何在Django Admin中更改站点标题、站点头部和索引标题?

277 投票
24 回答
189751 浏览
提问于 2025-04-16 11:28

我该如何在Django后台管理中更改网站标题 Django site admin、网站头部 Django administration 和首页标题 Site administration 呢?

在这里输入图片描述

24 个回答

258

有一个简单的方法可以设置管理员网站的标题——在 urls.py 文件中把它赋值给当前的管理员实例,像这样:

admin.site.site_header = 'My admin'

或者,你也可以在一个单独的方法里实现一些设置标题的技巧。

admin.site.site_header = get_admin_header()

所以,在简单的情况下,其实不需要去创建一个 AdminSite 的子类。

424

从Django 1.7开始,你不需要再去重写模板了。现在你可以在自定义的AdminSite中实现一些属性,比如site_headersite_titleindex_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.pyadmin.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 中。

查看文档以获取关于 settings.py 的更多信息

撰写回答