Создание админских представлений
Наиболее распространённое использование пользовательских представлений в админ-панели Wagtail — предоставление интерфейса для управления моделью Django. Приложение ModelAdmin упрощает эту задачу, предоставляя готовые представления для отображения, создания и редактирования объектов с минимальной настройкой.
Для других типов админских представлений, которые не подходят под эту модель, вы можете написать собственные представления Django и зарегистрировать их как часть админ-панели Wagtail через хуки. В этом примере мы реализуем представление, отображающее календарь на текущий год, используя модуль calendar из стандартной библиотеки Python.
Определение представления
В проекте Wagtail создайте новую wagtailcalendar приложение с ./manage.py startapp wagtailcalendar и добавьте его в INSTALLED_APPS вашего проекта. (В этом случае мы используем имя «wagtailcalendar», чтобы избежать конфликта со стандартным модулем calendar — в общем случае нет необходимости использовать префикс «wagtail».)
Отредактируйте views.py следующим образом — обратите внимание, что это обычное представление Django без специфичного для Wagtail кода.
import calendar
from django.http import HttpResponse
from django.utils import timezone
def index(request):
current_year = timezone.now().year
calendar_html = calendar.HTMLCalendar().formatyear(current_year)
return HttpResponse(calendar_html)
Регистрация маршрута URL
В стандартной практике для проекта Django добавление маршрута URL для этого представления в модуль конфигурации URL-адресов верхнего уровня вашего проекта. Однако в этом случае мы хотим, чтобы представление было доступно только авторизованным пользователям и отображалось в пространстве имён URL /admin/, которое управляется Wagtail. Это делается через хук register_admin_urls.
При запуске Wagtail ищет wagtail_hooks подмодуль в каждом установленных приложении. В этом подмодуле вы можете определить функции, которые будут выполняться в различные моменты работы Wagtail, такие как построение конфигурации URL-адресов для админ-панели и создание основного меню.
Создайте файл wagtail_hooks.py в приложении wagtailcalendar с содержанием:
from django.urls import path
from wagtail import hooks
from .views import index
@hooks.register('register_admin_urls')
def register_calendar_url():
return [
path('calendar/', index, name='calendar'),
]
Календарь теперь будет доступен по адресу /admin/calendar/.
Добавление шаблона
В настоящее время это представление выводит обычный фрагмент HTML. Давайте вставим его в обычную структуру страницы админ-панели Wagtail, создав шаблон, который расширяет базовый шаблон Wagtail "wagtailadmin/base.html".
Примечание
Базовый шаблон и структура HTML не считаются стабильной частью API Wagtail и могут быть изменены в будущих версиях.
Обновите views.py следующим образом:
import calendar
from django.shortcuts import render
from django.utils import timezone
def index(request):
current_year = timezone.now().year
calendar_html = calendar.HTMLCalendar().formatyear(current_year)
return render(request, 'wagtailcalendar/index.html', {
'current_year': current_year,
'calendar_html': calendar_html,
})
Теперь создайте папку templates/wagtailcalendar/ в приложении wagtailcalendar, содержащую index.html следующим образом:
{% extends "wagtailadmin/base.html" %}
{% block titletag %}{{ current_year }} calendar{% endblock %}
{% block extra_css %}
{{ block.super }}
<style>
table.month {
margin: 20px;
}
table.month td, table.month th {
padding: 5px;
}
</style>
{% endblock %}
{% block content %}
{% include "wagtailadmin/shared/header.html" with title="Calendar" icon="date" %}
<div class="nice-padding">
{{ calendar_html|safe }}
</div>
{% endblock %}
Здесь мы переопределяем три блока, определённых в базовом шаблоне: titletag (который устанавливает содержимое тега HTML <title>), extra_css (который позволяет предоставить дополнительные стили CSS, специфичные для этой страницы) и content (для основной области содержимого страницы). Мы также включаем стандартный компонент заголовка и устанавливаем заголовок и значок. Список допустимых идентификаторов значков см. в Руководстве по стилю пользовательского интерфейса.
Перейдя в /admin/calendar/ вы теперь увидите календарь в структуре страницы админ-панели Wagtail.
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v3.0.3/extending/admin_views.html