Django Admin-更改标题“ Django管理”文本


201

如何更改django管理员标头中的“ Django管理”文本?

“自定义管理员”文档中似乎没有涉及它。


教程将对此进行介绍。
djvg

Answers:


139

更新:如果您使用的是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

有关更多信息,请参见docssettings.py


77
另请注意,您可以{% extends "admin/base.html" %}在中/<projectdir>/templates/admin/base_site.html,并简单地重新定义所需的块,即{% block branding %}...{% endblock %}
Arnaud

12
即使很老,我想补充一点,您必须在INSTALLED_APPS
DRC

1
在django 1.6 python 3.3中,即使您不添加TEMPLATE_LOADER设置,以上方法也可以工作。TEMPLATE_DIR看起来就足够了
lukik 2014年

12
从1.7开始已过时。请参阅Reto Aebersold的答案。
Andrew B.

5
在url.py admin.site.site_header ='我的管理'admin.site.index_title =('我的管理')admin.site.site_title =('我的管理页面')中尝试
Ashish Gupta

352

从Django 1.7开始,您不需要覆盖模板。现在,您可以在自定义AdminSite上实现site_headersite_titleindex_title属性,以便轻松更改管理站点的页面标题和标题文本。创建一个AdminSite子类并将您的实例挂接到URLconf中:

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所指出的,您可以简单地site_headerurls.pyadmin.py不设置子类的情况下设置AdminSite

admin.site.site_header = 'My administration'

11
当我尝试访问/ myadmin /时,这将引发“您无权编辑任何内容”错误消息。看起来我应该调用.autodiscover,但是Django 1.7应该自动调用它。有什么线索吗?
David Arcos 2014年

3
@DavidArcos您需要在admin_site创建的新模型上注册模型。喜欢admin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
如果还应该自定义django.auth.views中的标头(取决于admin/base_site.html模板,例如password_reset),则还extra_context应该在url中使用:例如url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

关于这种方法的一些知识是,它仅适用于标准管理页面,如果在另一应用程序上添加自己的管理页面(扩展管理基础模板),则它们将始终采用默认的“ Django管理”标题。
凯达雷

1
@oxfn如果我有多个应用程序,那么admin.site.site_header其中的配置app*/admin.py将生效?
nalzok '17

196

有一个简单的方法来设置管理站点标题- urls.py像这样将其分配给当前管理实例

admin.site.site_header = 'My admin'

或者可以用单独的方法实现一些头构建魔术

admin.site.site_header = get_admin_header()

因此,在简单情况下,无需子类化 AdminSite


1
第一种方法有效。我真的不知道目前出了什么问题。谢谢
Alex Jolig

4
如果您要更改标题,则可能还需要更改站点标题,可以使用:来完成admin.site.site_title = 'My site admin'
mcastle

1
这是要添加到的导入字符串urls.pyfrom django.contrib import admin
serg

4
希望我能首先找到这个……仔细听文档,我继承了类别AdminSite,花了一段时间使它能正常工作,autodiscover()但最终我自己想到了这个解决方案。我实际上有我的重写admin.py,我认为它更干净,因为它与所有其他与管理相关的逻辑一起保留
user193130 2016年


96

在其中urls.py可以覆盖3个最重要的变量:

from django.contrib import admin

admin.site.site_header = 'My project'                    # default: "Django Administration"
admin.site.index_title = 'Features area'                 # default: "Site administration"
admin.site.site_title = 'HTML title from adminsitration' # default: "Django site admin"

参考:有关这些属性的Django文档


65

Django 1.8.3中基于此问题的答案的简单完整解决方案。

settings.py添加:

ADMIN_SITE_HEADER = "My shiny new administration"

urls.py添加:

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER

7
有比使用urls.py更好的方法吗?
Venkat Kotra '16

2
@VenkatKotra是的,在admin.py。如果您还没有,请创建它,不要忘记添加from django.contrib import admin
user193130 '16

3
导入设置的推荐的方法是通过- “从django.conf导入设置”(见docs.djangoproject.com/en/1.9/topics/settings/...
yoniLavi

1
Django所关注的设置没有设置,ADMIN_SITE_HEADER唯一重要的是urls.py
-Flimm,

16

最简单的方法是确保您拥有

from django.contrib import admin

然后将它们添加到url.py主应用程序的底部

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 

15

对于Django 2.1.1,将以下行添加到 urls.py

from django.contrib import admin

# Admin Site Config
admin.sites.AdminSite.site_header = 'My site admin header'
admin.sites.AdminSite.site_title = 'My site admin title'
admin.sites.AdminSite.index_title = 'My site admin index'

10

正如您在模板中看到的那样,文本是通过本地化框架传递的(请注意transtemplate标签的使用)。您可以更改翻译文件以覆盖文本,而无需制作自己的模板副本。

  1. mkdir locale

  2. ./manage.py makemessages

  3. 编辑locale/en/LC_MESSAGES/django.po,添加以下行:

    msgid "Django site admin"
    msgstr "MySite site admin"
    
    msgid "Django administration"
    msgstr "MySite administration"
  4. ./manage.py compilemessages

参见https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files


1
这是一个糟糕的解决方案。覆盖翻译字符串只是一个可怕的想法。

5

admin.py:

from django.contrib.admin import AdminSite

AdminSite.site_title = ugettext_lazy('My Admin')

AdminSite.site_header = ugettext_lazy('My Administration')

AdminSite.index_title = ugettext_lazy('DATA BASE ADMINISTRATION')

1
from django.utils.translation import ugettext_lazy 不要忘记添加这一行。
rkdevs

5

首先,您应该将template / admin / base_site.html添加到您的项目中。该文件可以被安全地覆盖,因为它是Django开发人员专门用于自定义管理站点的确切目的的文件。这是放置在文件中的示例:

{% extends "admin/base.html" %}
{% load i18n %}

{% block title %}{{ title }} | {% trans 'Some Organisation' %}{% endblock %}

{% block branding %}
<style type="text/css">
  #header
  {
    /* your style here */
  }
</style>
<h1 id="site-name">{% trans 'Organisation Website' %}</h1>
{% endblock %}

{% block nav-global %}{% endblock %}

这是惯例。但是在此之后,我注意到我在主要的管理索引页面上仍然留下烦人的“站点管理”。而且此字符串不在任何模板内,而是在admin视图内设置。幸运的是,更改非常容易。假设您的语言设置为英语,请从您的项目目录中运行以下命令:

$ mkdir locale
$ ./manage.py makemessages -l en

现在打开文件locale / en / LC_MESSAGES / django.po,并在标题信息之后添加两行(此示例的最后两行)

"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-03 03:25+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Site administration"
msgstr "Main administration index"

之后,请记住运行以下命令并重新加载项目的服务器:

$ ./manage.py compilemessages

来源:http : //overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/


链接到外部站点被认为是不好的,因为链接可能会出错。建议您从此处的站点重写答案。

我重写了答案,以防您不想去外面的地方。
Soroosh

5

Django 2.0中,您只需在中添加一行url.py并更改名称即可。

# url.py

from django.contrib import admin 
admin.site.site_header = "My Admin Central" # Add this

对于旧版本的Django。(<1.11和更早版本),您需要进行编辑admin/base_site.html

更改此行

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}

您可以django通过以下方式检查您的版本

django-admin --version


3

您无需为此工作更改任何模板,只需更新settings.py项目的即可。转到的底部settings.py并定义它。

admin.site.site_header = 'My Site Admin'

这样,您将能够更改Django admin的标头。此外,您可以在以下链接上阅读有关Django Admin自定义和设置的更多信息。

Django管理文档



3

有两种方法可以做到这一点:

1]覆盖base_site.htmldjango/contrib/admin/templates/admin/base_site.html:以下是内容base_site.html

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

在上述代码段中编辑site_title和site_header。此方法有效,但不推荐使用,因为它是静态更改。

2]通过在urls.py项目目录中添加以下行:

admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"

推荐使用此方法,因为我们无需编辑即可更改网站标题,网站标题和索引标题base_site.html


2

由于我仅在应用程序中使用管理界面,因此将其放在admin.py中:

admin.site.site_header = 'My administration'

1

您只需覆盖admin/base_site.html模板(从复制模板django.contrib.admin.templates并放入您自己的管理模板目录),然后替换该branding块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.