Як змінюється текст "Адміністрація Джанго" у заголовку адміністратора 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.{% 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 та підключіть свій примірник до 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 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:
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 Не забудьте додати цей рядок.
Перш за все, слід додати шаблони / 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/
З 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
Просто перейдіть у файл admin.py та додайте цей рядок у файл:
admin.site.site_header = "My Administration"
вам не потрібно змінювати жоден шаблон для цієї роботи, вам просто потрібно оновити 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і вкладіть у свій власний каталог адміністратора dir) та замініть brandingблок.