Як змінюється текст "Адміністрація Джанго" у заголовку адміністратора 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
блок.