Django Admin - изменить текст заголовка 'Администрация Django'


203

Как изменить текст «Администрация Django» в заголовке администратора Django?

Похоже, это не описано в документации «Настройка администратора».


Это описано в уроке .
djvg

Ответы:


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.

Смотрите документы для получения дополнительной информацииsettings.py .


77
Также обратите внимание , что вы можете {% extends "admin/base.html" %}в /<projectdir>/templates/admin/base_site.html, и просто переопределить блок (ы) вам нужно, то есть {% block branding %}...{% endblock %}.
Арно

12
даже если он довольно старый, я хочу добавить, что вы должны поместить свое приложение, где вы определяете этот шаблон, перед 'django.contrib.admin', в INSTALLED_APPS
DRC

1
В django 1.6 python 3.3 вышеописанное работает, даже если вы не добавляете TEMPLATE_LOADERнастройки. Просто этого TEMPLATE_DIRдостаточно
lukik

12
Это устарело на 1.7. Смотрите ответ Рето Эберсольда.
Эндрю Б.

5
Попробуйте это в url.py admin.site.site_header = «Моя администрация» admin.site.index_title = («Мой администратор») admin.site.site_title = («Моя страница администратора»)
Ашиш Гупта

352

Начиная с 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'

11
Это выдает сообщение об ошибке «У вас нет прав на редактирование», когда я пытаюсь получить доступ к / myadmin /. Похоже, мне следует позвонить .autodiscover, но Django 1.7 должен вызываться автоматически. Любая подсказка?
Дэвид Аркос

3
@DavidArcos Вы должны зарегистрировать свои модели на новые, admin_siteкоторые вы создали. Нравитсяadmin_site.register(MyModel, ModelAdmin)
Андрей Федосеев

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силу?
Нальзок

196

Существует простой способ установить заголовок сайта администратора - назначить его текущему экземпляру администратора urls.pyследующим образом

admin.site.site_header = 'My admin'

Или можно реализовать магию построения заголовков в отдельном методе

admin.site.site_header = get_admin_header()

Таким образом, в простых случаях нет необходимости создавать подклассы AdminSite


1
Первый способ сработал. Я действительно не знаю, в чем была проблема в данный момент. спасибо
Алекс Джолиг

4
Если вы изменяете заголовок, вы , вероятно , также необходимо изменить название сайта, которое может быть достигнуто с: admin.site.site_title = 'My site admin'.
Mcastle

1
Вот строка импорта, которую нужно добавить urls.py:from django.contrib import admin
serg

4
Хотел бы я сначала найти это ... Прислушиваясь к документации, я AdminSiteпровел подкласс и потратил некоторое время, пытаясь заставить его работать, autodiscover()но в конце концов подумал об этом решении самостоятельно. У меня на самом деле есть переопределение admin.py, которое я считаю более чистым, поскольку оно сохраняется вместе со всей другой связанной с администрацией логикой
user193130

1
проверьте список всех атрибутов, которые вы можете изменить, на docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Серхио Морстабилини,

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?
Венкат Котра

2
@VenkatKotra Да, в admin.py. Если у вас его еще нет, просто создайте его и не забудьте добавить from django.contrib import admin.
user193130

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

Как видно из шаблонов , текст доставляется через структуру локализации (обратите внимание на использование 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"
  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

Прежде всего, вы должны добавить 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/


Ссылка на внешние сайты считается плохой, так как ссылка может пойти плохо. Вам предлагается переписать ответ с сайта здесь.

Я переписал ответ, если ты не хочешь выходить за пределы сайта.
Сороош

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. Более того, вы можете узнать больше о настройках и настройках Django Admin по следующей ссылке.

Документация администратора Django



3

Есть два способа сделать это:

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.


2

Поскольку я использую только интерфейс администратора в своем приложении, я помещаю это в admin.py:

admin.site.site_header = 'My administration'

1

Вы просто перезаписываете admin/base_site.htmlшаблон (копируете шаблон django.contrib.admin.templatesи вставляете в свой собственный каталог шаблонов администратора) и заменяете brandingблок.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.