Настройка внешнего вида административного интерфейса
Очевидно, что наличие надписи "Django administration" (Администрирование Django) вверху каждой страницы административного интерфейса выглядит нелепо. Это всего лишь текст-заполнитель.
Однако вы можете изменить его с помощью шаблонизатора Django. Административный интерфейс Django основан на Django самой, и его интерфейсы используют собственный шаблонизатор Django.
Настройка шаблонов проекта
Создайте директорию templates
в директории вашего проекта (той, которая содержит manage.py
). Шаблоны могут располагаться в любом месте файловой системы, к которому имеет доступ Django. (Django запускается под тем пользователем, под которым запущен сервер.) Однако следовать правилу о хранении шаблонов внутри проекта является хорошей практикой.
Откройте файл настроек (mysite/settings.py
, помните), и добавьте параметр DIRS <TEMPLATES-DIRS>
в настройку TEMPLATES
:
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "templates"],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
DIRS <TEMPLATES-DIRS>
— это список директорий файловой системы, которые будут проверяться при загрузке шаблонов Django; это путь поиска.
Организация шаблонов
Точно так же, как и статические файлы, мы могли бы иметь все наши шаблоны вместе, в одной большой директории templates
, и это работало бы прекрасно. Однако шаблоны, относящиеся к определенному приложению, должны быть помещены в директорию шаблонов этого приложения (например, polls/templates
), а не в директорию проекта (templates
). Мы обсудим в более подробностях в уроке о модульных приложениях </intro/reusable-apps>
почему мы это делаем.
Теперь создайте директорию под названием admin
внутри templates
, и скопируйте шаблон admin/base_site.html
из стандартной директории шаблонов административного интерфейса в исходном коде Django (django/contrib/admin/templates
) в эту директорию.
Где находятся исходные файлы Django?
Если у вас возникают трудности с поиском расположения исходных файлов Django на вашей системе, запустите следующую команду:
python -c "import django; print(django.__path__)"
['/home/labex/.local/lib/python3.10/site-packages/django']
Затем отредактируйте файл и замените {{ site_header|default:_('Django administration') }}
(включая фигурные скобки) на имя вашего сайта, как вам будет уместно. В итоге у вас должно получиться раздел кода, похожий на:
{% block branding %}
<div id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a><div>
{% endblock %}
Мы используем этот подход, чтобы показать вам, как переопределить шаблоны. В реальном проекте вы, вероятно, бы использовали атрибут django.contrib.admin.AdminSite.site_header
, чтобы более легко произвести данную настройку.
В этом файле шаблона содержится много текста, подобного {% block branding %}
и {{ title }}
. Теги {%
и {{
являются частью языка шаблонов Django. Когда Django рендерит admin/base_site.html
, этот язык шаблонов будет оцениваться, чтобы сформировать окончательную HTML-страницу, точно так же, как мы видели в разделе **Создание представлений для публичного интерфейса**
.
Обратите внимание, что любой стандартный шаблон административного интерфейса Django может быть переопределен. Чтобы переопределить шаблон, сделайте то же, что и с base_site.html
— скопируйте его из стандартной директории в вашу собственную директорию и внесите изменения.
Настройка шаблонов приложения
Бережливые читатели спросят: Но если DIRS <TEMPLATES-DIRS>
по умолчанию был пустым, как Django находил стандартные шаблоны административного интерфейса? Ответ заключается в том, что, так как APP_DIRS <TEMPLATES-APP_DIRS>
установлен в True
, Django автоматически ищет поддиректорию templates/
внутри каждого пакета приложения, для использования в качестве резервного варианта (не забывайте, что django.contrib.admin
— это приложение).
Наше приложение для опросов не очень сложно и не требует собственных шаблонов административного интерфейса. Однако, если оно стало более сложным и потребовало модификации стандартных шаблонов административного интерфейса для некоторых его функций, было бы более разумным изменить шаблоны приложения, а не шаблоны проекта. Таким образом, вы могли бы включить приложение для опросов в любой новый проект и быть уверены, что оно найдет нужные ему собственные шаблоны.
Подробнее о том, как Django находит свои шаблоны, см. в документации по загрузке шаблонов <template-loading>
.