Django Admin - change header '文本

如何更改Django admin头中的“Django administration”文本?

“自定义管理”文档中似乎没有涉及到这一点。

166865 次浏览

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

更新:如果你使用的是Django 1.7+,请参见下面的回答. 0。


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的更多信息,请参阅文档

正如你在模板中看到的,文本是通过本地化框架传递的(注意使用了trans模板标记)。您可以对翻译文件进行更改,以覆盖文本,而无需制作自己的模板副本。

  1. < p > mkdir locale

  2. < p > ./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. < p > ./manage.py compilemessages

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

首先,您应该将templates/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 %}

这是常见的做法。但我注意到,在这之后,我仍然在主管理索引页上留下了一个烦人的“网站管理”。这个字符串不在任何模板中,而是在管理视图中设置的。幸运的是,这很容易改变。假设你的语言设置为英语,在你的项目目录中运行以下命令:

$ 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/

从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指出的那样,你可以直接在你的urls.pyadmin.py中设置site_header,而不需要子类化AdminSite:

admin.site.site_header = 'My administration'

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

admin.site.site_header = 'My admin'

或者你也可以用另一种方法来实现一些创建头部的魔法

admin.site.site_header = get_admin_header()

因此,在简单的情况下,不需要子类化AdminSite

基于这个问题的答案,在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

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文档

因为我只在我的应用程序中使用管理界面,我把这个放在admin.py中:

admin.site.site_header = 'My administration'

你不需要为这项工作更改任何模板,你只需要更新项目的settings.py。找到settings.py的底部并定义这个。

admin.site.site_header = 'My Site Admin'

通过这种方式,你可以改变Django管理员的标题。此外,你可以在下面的链接中阅读更多关于Django Admin定制和设置的内容。

Django Admin Documentation .

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')

最简单的方法 确保你有

from django.contrib import admin

然后在你的主应用程序的url.py底部添加这些

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

您可以使用AdminSite.site_header来更改该文本。这里是文档

对于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'

有两种方法:

1]通过在django/contrib/admin/templates/admin/base_site.html中覆盖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"
admin.site.site_url = "Url for view site button"

这个方法是推荐的,因为我们可以改变site-header, site-title &index-title而不编辑base_site.html

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

只需转到admin.py文件,并在文件中添加这一行:

admin.site.site_header = "My Administration"

你可以在你的main urls.py中使用下面这些行

您可以在要显示的引号中添加文本

使用admin.site.site_header = ""替换Django admin的文本

要替换文本Site Administration,使用admin.site.site_title = ""

要替换站点名称,可以使用admin.site.index_title = ""

要替换视图站点按钮的url,可以使用admin.site.site_url = ""

希望我不会太晚,最简单的是编辑admin.py文件。

admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'

使用format_html来允许html被渲染,否则它将只是纯文本。

在你的主urls.py文件中添加以下内容(urls.pysettings.py存在的目录中):

from django.contrib import admin
from django.utils.html import format_html


site_header = 'Your html snippet'
admin.site.site_header = format_html(site_header)

简单方法是在< >强url.py < / >强中添加以下代码

    urlpatterns = [
#Your URLS here
path('admin/', admin.site.urls),
]


admin.site.site_header = 'SiteName Admin'
admin.site.site_title  = 'SiteName'
admin.site.index_title   = 'Admin'