从 Django 1.7 开始,您不需要覆盖模板。您现在可以在自定义 AdminSite 上实现 site_header、site_title
和 index_title
属性,以便轻松更改管理站点的页面标题和标题文本。创建一个 AdminSite 子类并将您的实例挂接到您的 URLconf 中:
管理员.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()
网址.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'
有一种设置管理站点标题的简单方法 - 像这样将其分配给 urls.py
中的当前管理实例
admin.site.site_header = 'My admin'
或者可以在单独的方法中实现一些标题构建魔法
admin.site.site_header = get_admin_header()
因此,在简单的情况下,不需要子类 AdminSite
admin.site.site_title = 'My site admin'
完成。
urls.py
的导入字符串:from django.contrib import admin
AdminSite
子类化并花了一段时间尝试使其与 autodiscover()
一起工作,但最终我自己想到了这个解决方案。我实际上在 admin.py
中有我的覆盖,我认为它更干净,因为它与所有其他与管理相关的逻辑一起保存
在 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 documentation on these attributes。
username
的登录用户的标题为 index 例如:admin.site.index_title = request.user.username+' Features area'
更新:如果您使用的是 Django 1.7+,请参阅 answer below。
2011 年的原始答案:您需要创建自己的管理 base_site.html
模板来执行此操作。最简单的方法是创建文件:
/<projectdir>/templates/admin/base_site.html
这应该是 original 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 中。
See docs for more information on settings.py
。
/<projectdir>/templates/admin/base_site.html
中{% extends "admin/base.html" %}
,并简单地重新定义您需要的块,即 {% block branding %}...{% endblock %}
。
TEMPLATE_LOADER
设置,上述内容也有效。似乎只需 TEMPLATE_DIR
就足够了
基于此问题的答案,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
admin.py
中。如果您还没有它,只需创建它,不要忘记添加 from django.contrib import admin
。
ADMIN_SITE_HEADER
的设置,这里唯一重要的是 urls.py
中的行
对于 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'
最简单的方法确保你有
from django.contrib import admin
然后只需将这些添加到您主应用程序的 url.py
底部
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
希望派对还不算太晚,最简单的方法是编辑 admin.py 文件。
admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'
正如您在 templates 中看到的那样,文本是通过本地化框架提供的(注意 trans
模板标签的使用)。您可以更改翻译文件以覆盖文本,而无需制作您自己的模板副本。
mkdir locale ./manage.py makemessages 编辑 locale/en/LC_MESSAGES/django.po,添加以下行: msgid "Django 站点管理员" msgstr "MySite 站点管理员" msgid "Django 管理" msgstr "MySite 管理" ./manage.py编译消息
请参阅https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files
在 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
管理员.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.utils.translation import ugettext_lazy
不要忘记添加这一行。
只需转到 admin.py 文件并在文件中添加这一行:
admin.site.site_header = "My Administration"
有两种方法可以做到这一点:
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"
推荐使用这种方法,因为我们可以更改站点标题、站点标题和索引标题而不编辑 base_site.html
。
简单方法是在您的 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'
首先,您应该将 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/
使用 format_html
允许呈现 html,否则它将只是纯文本。
在您的主 urls.py
文件中添加以下内容(urls.py
位于 settings.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)
username
例如 admin.site.index_title = request.user.username + ' Admin
您可以在主 urls.py
中使用以下几行
您可以在要显示的引号中添加文本
要替换文本 Django admin 使用 admin.site.site_header = ""
要替换文本站点管理,请使用 admin.site.site_title = ""
要替换站点名称,您可以使用 admin.site.index_title = ""
要替换查看站点按钮的 url,您可以使用 admin.site.site_url = ""
您无需为此工作更改任何模板,只需更新项目的 settings.py
。转到 settings.py
的底部并定义它。
admin.site.site_header = 'My Site Admin'
通过这种方式,您将能够更改 Django 管理员的标题。此外,您可以在以下链接上阅读有关 Django Admin 自定义和设置的更多信息。
您只需覆盖 admin/base_site.html
模板(从 django.contrib.admin.templates
复制模板并放入您自己的管理模板目录)并替换 branding
块。
因为我只在我的应用程序中使用管理界面,所以我把它放在 admin.py 中:
admin.site.site_header = 'My administration'
admin_site
上注册您的模型。喜欢admin_site.register(MyModel, ModelAdmin)
admin/base_site.html
模板,例如 password_reset),则还应在 url 中使用extra_context
:例如url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
app*/admin.py
中的admin.site.site_header
配置会生效吗?