Перейти к основному содержимому

Информационные страницы

Добавлено в 1.0.1

AdminInformationPage — это AdminPage, которая рисует секции, алерты, badge, действия шапки и timeline. По-прежнему нужен один контракт доступа: наследуйте PermissionAdminPage, PersonalAdminPage или SuperuserAdminPage и AdminInformationPage (в MRO контракт доступа первым, если оба определяют has_view_permission).

Шаблон: admin/chassis/information_page.html (наследует admin/chassis/page.html).

Анатомия страницы

┌─ breadcrumbs ─────────────────────────────────────────────┐
│ Dashboard › раздел › label страницы │
├─ действия шапки (`chassis_page_actions`) ─────────────────┤
│ кнопки AdminPageActionDTO │
├─ алерты ──────────────────────────────────────────────────┤
│ полоса AdminPageAlertDTO │
├─ CSS-сетка секций (четыре колонки) ───────────────────────┤
│ ┌ заголовок секции [header_action] ──────────────────┐ │
│ │ строка: иконка label value badges [действие] │ │
│ │ … или timeline вместо строк │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘

view() всегда вызывает:

self.render(
request=request,
information_sections=self.get_information_sections(request=request),
chassis_page_actions=self.get_page_actions(request=request),
chassis_page_alerts=self.get_page_alerts(request=request),
)

Реализуйте get_information_sections. Остальные два хука по умолчанию возвращают [].

Хуки

МетодВозвратОбязателен
get_information_sections(request)list[AdminInformationSectionDTO]да
get_page_actions(request)list[AdminPageActionDTO]нет
get_page_alerts(request)list[AdminPageAlertDTO]нет

DTO

AdminInformationSectionDTO

Блок на сетке из четырёх колонок.

ПолеТипПо умолчаниюНазначение
titleлокализованная строкаобязательнозаголовок секции
rowslist[AdminInformationRowDTO]обязательностроки label/value
column_spanint4ширина в колонках (1–4)
column_startint или NoneNoneнеобязательный старт в сетке
row_spanint1вертикальный span
timelineAdminTimelineDTO или NoneNoneвместо строк, если задан
header_actionAdminPageActionDTO или NoneNoneкнопка в шапке секции

AdminInformationRowDTO

ПолеТипПо умолчанию
labelлокализованная строкаобязательно
valueлюбое или Noneобязательно
actionAdminPageActionDTO или NoneNone
badgestuple[AdminInformationBadgeDTO, ...]()
icon_classкласс Font Awesome''
icon_colorButtonColor или NoneNone
icon_labelлокализованная строка''

AdminInformationBadgeDTO

ПолеТип
labelлокализованная строка
colorButtonColor

AdminPageAlertDTO

ПолеТипПо умолчанию
messageлокализованная строкаобязательно
colorButtonColorобязательно
icon_classкласс Font Awesome''

AdminPageActionDTO

Используется в тулбаре страницы, шапках секций и строках.

ПолеТипПо умолчанию
labelлокализованная строкаобязательно
urlstrобязательно
colorButtonColorобязательно
icon_classкласс Font Awesome''
show_labelboolFalse

Семейство timeline

DTOПоля
AdminTimelineDTOgroups: list[AdminTimelineGroupDTO], empty_text
AdminTimelineGroupDTOdate_label, items: list[AdminTimelineItemDTO]
AdminTimelineItemDTOoccurred_at: datetime, title, subtitle, result_color: ButtonColor | None

Типичная страница

from django_chassis.dto import (
AdminInformationBadgeDTO,
AdminInformationRowDTO,
AdminInformationSectionDTO,
AdminPageActionDTO,
AdminPageAlertDTO,
)
from django_chassis.enums import ButtonColor
from django_chassis.views import AdminInformationPage, PermissionAdminPage


class InventoryPage(PermissionAdminPage, AdminInformationPage):
slug = 'inventory'
title = 'Склад'
label = 'Склад'
permission = view_inventory

def get_page_alerts(self, request):
return [
AdminPageAlertDTO(
message='Два импорта ждут проверки.',
color=ButtonColor.WARNING,
icon_class='fa-solid fa-triangle-exclamation',
)
]

def get_page_actions(self, request):
return [
AdminPageActionDTO(
label='Открыть книги',
url='/admin/catalog/book/',
color=ButtonColor.PRIMARY,
icon_class='fa-solid fa-book',
show_label=True,
)
]

def get_information_sections(self, request):
return [
AdminInformationSectionDTO(
title='Обзор',
column_span=2,
rows=[
AdminInformationRowDTO(
label='Книги',
value='128',
badges=(AdminInformationBadgeDTO(label='live', color=ButtonColor.SUCCESS),),
),
AdminInformationRowDTO(label='Авторы', value='34'),
],
)
]

TableOption можно положить рядом с секциями, если на кастомном view() нужен табличный блок. Таблицы связанных сущностей на change form ModelAdmin — другая option: Связанные сущности.

См. также