Django Admin - 更改标题'Django administration'文本

sam*_*ome 186 python django django-admin

如何更改django管理标头中的"Django管理"文本?

它似乎没有在"自定义管理员"文档中介绍.

Ret*_*old 337

从Django 1.7开始,您不需要覆盖模板.您现在可以在自定义AdminSite上实现site_header,site_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()
Run Code Online (Sandbox Code Playgroud)

urls.py:

from django.conf.urls import patterns, include
from myproject.admin import admin_site

urlpatterns = patterns('',
    (r'^myadmin/', include(admin_site.urls)),
)
Run Code Online (Sandbox Code Playgroud)

更新:正如oxfn所指出的那样,你可以简单地设置site_header你的urls.pyadmin.py直接没有子类AdminSite:

admin.site.site_header = 'My administration'
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试访问/ myadmin /时,会抛出"您没有编辑任何内容的权限"错误消息.看起来我应该打电话给.autodiscover,但是Django 1.7它应该被自动调用.任何线索? (10认同)
  • @DavidArcos您需要在您创建的新`admin_site`上注册模型.比如`admin_site.register(MyModel,ModelAdmin)` (3认同)
  • @oxfn如果我有多个应用程序,那么“app*/admin.py”中的“admin.site.site_header”配置会生效吗? (2认同)

oxf*_*xfn 183

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

admin.site.site_header = 'My admin'
Run Code Online (Sandbox Code Playgroud)

或者可以在单独的方法中实现一些标题构建魔法

admin.site.site_header = get_admin_header()
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您要更改标题,您可能还需要更改网站标题,这可以通过以下方式完成:`admin.site.site_title ='我的网站管理员'. (4认同)
  • 希望我先找到这个......听听文档后,我将`AdminSite`继承了,并花了一段时间试图让它与`autodiscover()`一起工作,但最终我自己想到了这个解决方案.我实际上在`admin.py`中有我的覆盖,我认为它更干净,因为它与所有其他管理相关的逻辑保持一致 (4认同)
  • 这是要添加到 `urls.py` 的导入字符串:`from django.contrib import admin` (2认同)

小智 133

更新:如果您使用的是Django 1.7+,请参阅下面答案.

2011年的原始答案:您需要创建自己的管理base_site.html模板才能执行此操作.最简单的方法是创建文件:

/<projectdir>/templates/admin/base_site.html
Run Code Online (Sandbox Code Playgroud)

这应该是https://github.com/django/django/blob/master/django/contrib/admin/templates/admin/base_site.html的副本- 除了输入您的自定义标题:

{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

为此,您需要为项目设置正确的设置,即在settings.py中:

  • 确保将'/ projectdir/templates /'添加到TEMPLATE_DIRS中
  • 确保将"django.template.loaders.filesystem.Loader"添加到TEMPLATE_LOADERS中

有关settings.py的更多信息,请参见http://docs.djangoproject.com/en/dev/ref/settings/

  • 另请注意,您可以在`/ <projectdir>/templates/admin/base_site.html`中"{%extends"admin/base.html"%}",只需重新定义所需的块,即`{%阻止品牌推广%} ... {%endblock%}`. (76认同)
  • 即使很旧,我想补充一点,你必须把你的应用程序放在你在'django.contrib.admin'之前定义这个模板的地方,INSTALLED_APPS (12认同)
  • 这已经过时了1.7.见Reto Aebersold的回答. (12认同)
  • 在url.py中尝试此操作admin.site.site_header ='我的管理'admin.site.index_title =('我的管理员')admin.site.site_title =('我的管理页面') (4认同)

Gre*_*ory 83

在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"
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该被认为是正确的答案。 (4认同)

kuz*_*vas 62

基于这个问题的答案,Django 1.8.3中的一个简单的完整解决方案.

另外settings.py:

ADMIN_SITE_HEADER = "My shiny new administration"
Run Code Online (Sandbox Code Playgroud)

另外urls.py:

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
Run Code Online (Sandbox Code Playgroud)

  • 有没有比使用urls.py更好的地方? (7认同)
  • 导入设置的推荐方法是通过 - "来自django.conf导入设置"(参见https://docs.djangoproject.com/en/1.9/topics/settings/#using-settings-in-python-code) (3认同)
  • @VenkatKotra是的,在`admin.py`中.如果您还没有它,只需创建它,不要忘记添加`来自django.contrib import admin`. (2认同)

Moh*_*m K 16

简单的方法是在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'
Run Code Online (Sandbox Code Playgroud)


小智 13

最简单的方法就是确保你拥有它

from django.contrib import admin
Run Code Online (Sandbox Code Playgroud)

然后只需在url.py主应用程序的底部添加这些内容

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 
Run Code Online (Sandbox Code Playgroud)


Gan*_*esh 12

对于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'
Run Code Online (Sandbox Code Playgroud)


Wed*_*ood 9

正如您在模板中看到的那样,文本是通过本地化框架提供的(请注意trans模板标记的使用).您可以更改翻译文件以覆盖文本,而无需创建自己的模板副本.

  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"
    
    Run Code Online (Sandbox Code Playgroud)
  4. ./manage.py compilemessages

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

  • 这是一个可怕的解决方案。覆盖翻译字符串只是一个糟糕的主意。 (3认同)

Tes*_*ter 8

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

# url.py

from django.contrib import admin 
admin.site.site_header = "My Admin Central" # Add this
Run Code Online (Sandbox Code Playgroud)

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

改变这一行

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

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

django-admin --version
Run Code Online (Sandbox Code Playgroud)


Jan*_*sha 8

用于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)
Run Code Online (Sandbox Code Playgroud)


小智 7

管理.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')
Run Code Online (Sandbox Code Playgroud)


Pra*_*pta 7

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

admin.site.site_header = "My Administration"


小智 7

希望参加聚会还不算太晚,最简单的方法是编辑 admin.py 文件。

admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'
Run Code Online (Sandbox Code Playgroud)


Sor*_*osh 6

首先,您应该将 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 %}
Run Code Online (Sandbox Code Playgroud)

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

$ mkdir locale
$ ./manage.py makemessages -l en
Run Code Online (Sandbox Code Playgroud)

现在打开文件 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"
Run Code Online (Sandbox Code Playgroud)

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

$ ./manage.py compilemessages
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

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 %}
Run Code Online (Sandbox Code Playgroud)

编辑上面代码片段中的 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"
Run Code Online (Sandbox Code Playgroud)

推荐使用这种方法,因为我们可以在不编辑的情况下更改站点标题、站点标题和索引标题base_site.html


小智 6

您可以在主程序中使用以下几行urls.py

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

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

要替换文本“站点管理”,请使用admin.site.site_title = ""

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

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


Chi*_*xit 5

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

admin.site.site_header = 'My Site Admin'
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您将能够更改 Django 管理的标头。此外,您可以在以下链接中阅读有关 Django Admin 自定义和设置的更多信息。

Django 管理文档


小智 5

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


Aas*_*mar 5

admin.py文件中只需覆盖这些属性

from django.contrib import admin

admin.site.site_header = "site header name"
admin.site.index_title = "index title name"
admin.site.site_title = "site title name"
Run Code Online (Sandbox Code Playgroud)