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

164

Как изменить текст администрирования Django в заголовке admin django?

Это не похоже на документацию "Настройка админы".

Теги:
django-admin

15 ответов

133
Лучший ответ

Обновление: если вы используете Django 1. 7+, см. Ответ ниже.

Оригинальный ответ от 2011 года. Для этого вам нужно создать собственный шаблон admin base.site.html. Самый простой способ - создать файл:

/<projectdir>/templates/admin/base_site.html

Это должна быть копия 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 %}

Для этого вам нужно иметь правильные настройки для своего проекта, а именно в settings.py:

  • Убедитесь, что '/projectdir/templates/' добавлен в TEMPLATE_DIRS
  • Убедитесь, что 'django.template.loaders.filesystem.Loader' добавлен в TEMPLATE_LOADERS

См. Http://docs.djangoproject.com/en/dev/ref/settings/ для получения дополнительной информации о settings.py

  • 72
    Также обратите внимание, что вы можете {% extends "admin/base.html" %} в /<projectdir>/templates/admin/base_site.html и просто переопределить /<projectdir>/templates/admin/base_site.html блоки, то есть {% block branding %}...{% endblock %} .
  • 12
    даже если он довольно старый, я хочу добавить, что вы должны поместить свое приложение, где вы определяете этот шаблон, перед 'django.contrib.admin', в INSTALLED_APPS
Показать ещё 4 комментария
298

С 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 <title>.
    site_title = ugettext_lazy('My site admin')

    # Text to put in each page <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'
  • 9
    Это выдает сообщение об ошибке «У вас нет прав на редактирование», когда я пытаюсь получить доступ к / myadmin /. Похоже, мне следует позвонить .autodiscover, но Django 1.7 должен вызываться автоматически. Любая подсказка?
  • 3
    @DavidArcos Вы должны зарегистрировать свои модели на новом admin_site вами сайте admin_site . Как admin_site.register(MyModel, ModelAdmin)
Показать ещё 4 комментария
150

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

admin.site.site_header = 'My admin'

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

admin.site.site_header = get_admin_header()

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

  • 0
    Я добавил его в свой url.py сразу после urlpattern. Но это не сработало, когда я запускаю сайт с nginx
  • 0
    @AlexJolig nginx не должен быть проблемой. Какой бэкенф вы используете? Вы перезапустили это?
Показать ещё 5 комментариев
58

Простое полное решение в 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 .
Показать ещё 2 комментария
49

В urls.py вы можете переопределить 3 наиболее важные переменные:

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.

10

Самый простой способ сделать это убедитесь, что у вас есть

from django.contrib import admin

а затем просто добавьте их внизу url.py основного приложения

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

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

  • 1
    Это ужасное решение. Переопределение строк перевода - просто ужасная идея.
3

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 Не забудьте добавить эту строку.
3

Прежде всего, вы хотите добавить в свой проект шаблоны /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 <[email protected]>\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/

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

Вы можете использовать AdminSite.site_header для изменения этого текста. Вот docs

2

вам не нужно менять какой-либо шаблон для этой работы, вам просто нужно обновить settings.py вашего проекта. Перейдите к нижней части settings.py и определите это.

admin.site.site_header = 'My Site Admin'

Таким образом, вы сможете изменить заголовок администратора Django. Кроме того, вы можете узнать больше о настройке и настройках Django Admin по следующей ссылке.

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

1

Для 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

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

admin.site.site_header = 'My administration'
0

Перейдите в файл admin.py и напишите:

from django.contrib.admin import AdminSite

AdminSite.site_header = "Your desired text"

Документация администратора Django может вам помочь.

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню