Django Admin - змініть текст заголовка "Адміністрація Джанго"


201

Як змінюється текст "Адміністрація Джанго" у заголовку адміністратора 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 = ('Моя сторінка адміністратора')
Ashish Gupta

352

На Django 1.7 вам не потрібно переосмислювати шаблони. Тепер ви можете реалізувати site_header , site_titleта index_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()

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"}})
адресах

Щось знати про цей спосіб - це те, що він буде працювати лише зі стандартними сторінками адміністратора, якщо на вашій стороні в іншому додатку ви додаєте власні сторінки адміністратора (розширіть базовий шаблон адміністратора), вони завжди прийматимуть за замовчуванням "Адміністрація Джанго" назва.
Кедаре

1
@oxfn Якщо у мене є кілька додатків, admin.site.site_headerконфігурація в яких app*/admin.pyнабуде чинності?
nalzok

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"

Довідка: Документація Джанго на ці атрибути .


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.
користувач193130

3
Рекомендований спосіб імпорту налаштувань - через "з налаштувань імпорту django.conf" (див. Docs.djangoproject.com/en/1.9/topics/settings/… )
yoniLavi

1
Немає налаштувань, на які Джанго дивиться покликаний 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

Перш за все, слід додати шаблони / 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

Тепер відкрийте локальний файл / 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/


Посилання на зовнішні сайти вважається поганим, оскільки посилання може бути поганим. Вам рекомендується переписати відповідь з веб-сайту тут.

Я переписав відповідь у випадку, якщо ви не хочете виходити за межі сайту.
Soroosh

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 за наступним посиланням.

Документація адміністратора Джанго



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і вкладіть у свій власний каталог адміністратора dir) та замініть brandingблок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.