Как изменить текст «Администрация Django» в заголовке администратора Django?
Похоже, это не описано в документации «Настройка администратора».
Как изменить текст «Администрация Django» в заголовке администратора Django?
Похоже, это не описано в документации «Настройка администратора».
Ответы:
Обновление : если вы используете 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
.
{% extends "admin/base.html" %}
в /<projectdir>/templates/admin/base_site.html
, и просто переопределить блок (ы) вам нужно, то есть {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
настройки. Просто этого TEMPLATE_DIR
достаточно
Начиная с Django 1.7 вам не нужно переопределять шаблоны. Теперь вы можете реализовать site_header , site_title
и index_title
атрибуты пользовательского AdminSite для того , чтобы легко изменить название страницы сайта админа и текст заголовка. Создайте подкласс 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_header
в своем urls.py
или admin.py
напрямую без подклассов AdminSite
:
admin.site.site_header = 'My administration'
admin_site
которые вы создали. Нравитсяadmin_site.register(MyModel, ModelAdmin)
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"}})
admin.site.site_header
конфигурация в котором вступит в app*/admin.py
силу?
Существует простой способ установить заголовок сайта администратора - назначить его текущему экземпляру администратора 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 документация по этим атрибутам .
Простое полное решение в 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
Самый простой способ сделать это, убедитесь, что у вас есть
from django.contrib import admin
а затем просто добавьте их в нижней части url.py
основного приложения
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
Как видно из шаблонов , текст доставляется через структуру локализации (обратите внимание на использование trans
тега шаблона). Вы можете внести изменения в файлы перевода, чтобы переопределить текст, не создавая собственную копию шаблонов.
mkdir locale
./manage.py makemessages
Отредактируйте locale/en/LC_MESSAGES/django.po
, добавив эти строки:
msgid "Django site admin"
msgstr "MySite site admin"
msgid "Django administration"
msgstr "MySite administration"
./manage.py compilemessages
См. Https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files.
Просто зайдите в файл admin.py и добавьте эту строку в файл:
admin.site.site_header = "My Administration"
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.utils.translation import ugettext_lazy
Не забудьте добавить эту строку.
Прежде всего, вы должны добавить 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 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
Вам не нужно менять какой-либо шаблон для этой работы, вам просто нужно обновить settings.py
свой проект. Перейти к нижней части settings.py
и определить это.
admin.site.site_header = 'My Site Admin'
Таким образом, вы сможете изменить заголовок администратора Django. Более того, вы можете узнать больше о настройках и настройках Django Admin по следующей ссылке.
Есть два способа сделать это:
1] Переопределив base_site.html
в django/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
.
Вы просто перезаписываете admin/base_site.html
шаблон (копируете шаблон django.contrib.admin.templates
и вставляете в свой собственный каталог шаблонов администратора) и заменяете branding
блок.