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

Dashboard

Добавлено в 1.0.1

Индекс Admin — это dashboard. Вы объявляете компоненты и раскладываете их по блокам на сетке из четырёх колонок. DashboardService проверяет раскладку и рендерит SSR-контекст. Live-виджеты обновляются через dashboard/live/.

Шаблон индекса: admin/chassis/dashboard/index.html (наследует admin/index.html). Меняйте index_template только если заменяете всю страницу.

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

┌─ navbar (тема, кнопки, dropdown групп страниц, меню пользователя) ─┐
├─ sidebar (объявленные sidebar_items) ───────────────────────────────┤
├─ полоса алертов (override `nav-breadcrumbs`) ───────────────────────┤
│ глобальные / alert-блоки (`is_global=True`, только ALERTS) │
├─ основная сетка (`admins-dashboard-layout`) ────────────────────────┤
│ ряд 1: блок size 2 + блок size 2 │
│ ряд 2: блок size 4 (на всю ширину) │
│ … │
│ опционально aside: «Recent actions» Django (`show_recent_actions`) │
└─────────────────────────────────────────────────────────────────────┘

Каждый блок подключает templates/admin/chassis/dashboard/sections/*.html по DashboardBlockType. Графики — ApexCharts. Live-виджеты опрашивают {% url 'admin:dashboard_live' %} с If-None-Match.

Если dashboard_component_classes пуст, оболочка всё равно рисуется: бренд, sidebar, navbar и пустая сетка.

Компоненты и блоки

from django.utils.translation import gettext_lazy as _

from django_chassis.dto import DashboardBlockDTO
from django_chassis.enums import DashboardBlockType


class CustomAdminSite(ChassisAdminSiteMixin, AdminSite):
dashboard_component_classes = (OpenOrdersMetric, RevenueChart, NightlyImportAlert, RebuildSearchAction)
dashboard_blocks = (
DashboardBlockDTO(
slug='alerts',
title=_('Alerts'),
block_type=DashboardBlockType.ALERTS,
component_slugs=('nightly-import',),
row=1,
size=4,
is_global=True,
),
DashboardBlockDTO(
slug='kpis',
title=_('Overview'),
block_type=DashboardBlockType.METRICS,
component_slugs=('open-orders',),
row=2,
size=2,
),
DashboardBlockDTO(
slug='revenue',
title=_('Revenue'),
block_type=DashboardBlockType.CHART,
component_slugs=('revenue',),
row=2,
size=2,
),
)

DashboardBlockDTO

ПараметрТипПо умолчанию
slugуникальный id блокаобязательный
titleлокализованная строкаобязательный
block_typeDashboardBlockTypeобязательный
component_slugsslug компонентов в этом блокеобязательный
rowстрока сетки1
groupгруппа раскладки'default'
size1–4 колонки4
orderсортировка внутри строки100
is_globalрастянуть на всю ширинуFalse

DashboardBlockType: alerts, metrics, actions, metrics_and_actions, chart.

Правила раскладки

  • Сетка — четыре колонки.
  • Блок графика содержит ровно один график.
  • Один slug компонента нельзя назначить дважды.
  • is_global=True можно ставить только у блоков alerts.
  • Неизвестные slug и пустые component_slugs не проходят валидацию.

Live-эндпоинт

GET {admin}/dashboard/live/ возвращает текущий снимок виджетов. Шлите If-None-Match, чтобы получить 304, если ETag не изменился. DashboardLiveSerializationService строит детерминированные ETag.

У виджетов есть etag, fetched_at и next_refresh_at, если компонент их отдаёт.

Видимость

Каждый компонент наследует:

  • slug, label, order, status
  • check_view(request) / check_use(request)
  • is_visible / is_available — суперпользователи видят и используют всё; HIDDEN скрывает виджет; статус не-ACTIVE блокирует использование

Конкретные контракты компонентов — в Метрики и графики dashboard.

См. также