Создание админских представлений
Наиболее распространенное использование пользовательских представлений в админке Wagtail — это предоставление интерфейса для управления моделью Django. Приложение Индекс упрощает эту задачу, предоставляя готовые представления для перечисления, создания и редактирования объектов с минимальной настройкой.
Для других типов админских представлений, которые не соответствуют этому шаблону, можно написать собственные представления 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. Это делается с помощью хука Зарегистрировать URL админки.
При запуске 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/stable/extending/admin_views.html