Spec-Zone.ru › Wagtail 2

Добавление отчетов

Отчеты — это представления со списками страниц, соответствующих определённому запросу. Они также могут экспортировать эти списки в формате электронных таблиц. Они находятся в подменю Reports: по умолчанию предоставляется отчет Locked Pages, позволяющий просмотреть заблокированные страницы на сайте.

Можно создавать собственные пользовательские отчеты в админ-панели Wagtail. Предоставляются два базовых класса: wagtail.admin.views.reports.ReportView, который обеспечивает базовые функции отображения списка и экспорта в электронную таблицу, и wagtail.admin.views.reports.PageReportView, который дополнительно предоставляет набор полей по умолчанию, подходящих для отображения страниц. В этом примере мы добавим отчет, который покажет все страницы с неза опубликованными изменениями.

# <project>/views.py

from wagtail.admin.views.reports import PageReportView


class UnpublishedChangesReportView(PageReportView):
    pass

Определение вашего отчета

Наиболее важные атрибуты и методы для настройки определения вашего отчета:

Это извлекает набор запросов страниц для вашего отчета. Для нашего примера:

# <project>/views.py

from wagtail.admin.views.reports import PageReportView
from wagtail.core.models import Page


class UnpublishedChangesReportView(PageReportView):

    def get_queryset(self):
        return Page.objects.filter(has_unpublished_changes=True)

(строка)

Шаблон, используемый для отображения вашего отчета. Для ReportView, по умолчанию используется "wagtailadmin/reports/base_report.html", который предоставляет пустой макет страницы отчета; для PageReportView, по умолчанию используется "wagtailadmin/reports/base_page_report.html", который предоставляет список, основанный на представлениях обозревателя, отображающий кнопки действий, а также заголовок, время последнего обновления, статус и конкретный тип любых страниц. В этом примере мы изменим это на новый шаблон в следующем разделе.

(строка)

Имя вашего отчета, которое будет отображаться в заголовке. Для нашего примера мы установим его в "Pages with unpublished changes".

(строка)

Имя значка, используя стандартные имена значков Wagtail. Например, представление заблокированных страниц использует "locked", а для нашего примера отчета мы установим его в 'doc-empty-inverse'.

Экспорт в электронные таблицы

(список)

Список полей/атрибутов для каждой модели, которые экспортируются как столбцы в представлении электронных таблиц. Для ReportView, это по умолчанию пусто, а для PageReportView, это соответствует полям списка: заголовок, время последнего обновления, статус и конкретный тип любой страницы. Для нашего примера, нам может понадобиться узнать, когда страница была опубликована в последний раз, поэтому мы установим list_export следующим образом:

list_export = PageReportView.list_export + ['last_published_at']

(словарь)

Словарь любых полей/атрибутов в list_export для которых вы хотите вручную указать заголовок для столбца электронных таблиц и их заголовки. Если не указано, заголовок будет взят из поля verbose_name если применимо, и строка атрибута в противном случае. Для нашего примера, last_published_at автоматически получит заголовок "Last Published At", но более читаемо выглядит просто «Последнее опубликование». Мы добавим это, установив export_headings:

export_headings = dict(last_published_at='Last Published', **PageReportView.export_headings)

(словарь)

Словарь кортежей (value_class_1, value_class_2, ...), сопоставленных со словарями {export_format: preprocessing_function}, что позволяет применять пользовательские функции предварительной обработки при экспорте значений полей определённых классов (или их подклассов). Если не указано (и ReportView.custom_field_preprocess также не указывает функцию), будет использоваться force_str. Чтобы предотвратить предварительную обработку, установите preprocessing_function в None.

(словарь)

Словарь строк field_name сопоставленных со словарями {export_format: preprocessing_function}, позволяющий применять пользовательские функции предварительной обработки при экспорте значений полей определённых классов (или их подклассов). Это будет иметь приоритет над функциями, указанными в ReportView.custom_value_preprocess. Если не указано (и ReportView.custom_value_preprocess также не указывает функцию), будет использоваться force_str. Чтобы предотвратить предварительную обработку, установите preprocessing_function в None.

Настройка шаблонов

Для этого отчета «страницы с неза опубликованными изменениями» мы добавим дополнительный столбец в шаблон списка, отображающий последнюю дату публикации для каждой страницы. Для этого мы расширим два шаблона: wagtailadmin/reports/base_page_report.html, и wagtailadmin/reports/listing/_list_page_report.html.

{# <project>/templates/reports/unpublished_changes_report.html #}

{% extends 'wagtailadmin/reports/base_page_report.html' %}

{% block listing %}
    {% include 'reports/include/_list_unpublished_changes.html' %}
{% endblock %}

{% block no_results %}
    <p>No pages with unpublished changes.</p>
{% endblock %}
{# <project>/templates/reports/include/_list_unpublished_changes.html #}

{% extends 'wagtailadmin/reports/listing/_list_page_report.html' %}

{% block extra_columns %}
    <th>Last Published</th>
{% endblock %}

{% block extra_page_data %}
    <td valign="top">
        {{ page.last_published_at }}
    </td>
{% endblock %}

Наконец, мы установим UnpublishedChangesReportView.template_name в этот новый шаблон: 'reports/unpublished_changes_report.html'.

Добавление пункта меню и URL-адреса административной панели

Чтобы добавить пункт меню для вашего нового отчета в подменю Reports, вам необходимо использовать хук register_reports_menu_item (см.: register_reports_menu_item). Чтобы добавить URL-адрес административной панели для отчета, вам необходимо использовать хук register_admin_urls (см. register_admin_urls). Это можно сделать следующим образом:

# <project>/wagtail_hooks.py

from django.urls import path, reverse

from wagtail.admin.menu import AdminOnlyMenuItem
from wagtail.core import hooks

from .views import UnpublishedChangesReportView

@hooks.register('register_reports_menu_item')
def register_unpublished_changes_report_menu_item():
    return AdminOnlyMenuItem("Pages with unpublished changes", reverse('unpublished_changes_report'), classnames='icon icon-' + UnpublishedChangesReportView.header_icon, order=700)

@hooks.register('register_admin_urls')
def register_unpublished_changes_report_url():
    return [
        path('reports/unpublished-changes/', UnpublishedChangesReportView.as_view(), name='unpublished_changes_report'),
    ]

Здесь мы используем класс AdminOnlyMenuItem для того, чтобы убедиться, что наш значок отчета отображается только суперпользователям. Чтобы сделать отчет видимым для всех пользователей, вы можете заменить это на MenuItem.

Полный код

# <project>/views.py

from wagtail.admin.views.reports import PageReportView
from wagtail.core.models import Page


class UnpublishedChangesReportView(PageReportView):

    header_icon = 'doc-empty-inverse'
    template_name = 'reports/unpublished_changes_report.html'
    title = "Pages with unpublished changes"

    list_export = PageReportView.list_export + ['last_published_at']
    export_headings = dict(last_published_at='Last Published', **PageReportView.export_headings)

    def get_queryset(self):
        return Page.objects.filter(has_unpublished_changes=True)
# <project>/wagtail_hooks.py

from django.urls import path, reverse

from wagtail.admin.menu import AdminOnlyMenuItem
from wagtail.core import hooks

from .views import UnpublishedChangesReportView

@hooks.register('register_reports_menu_item')
def register_unpublished_changes_report_menu_item():
    return AdminOnlyMenuItem("Pages with unpublished changes", reverse('unpublished_changes_report'), classnames='icon icon-' + UnpublishedChangesReportView.header_icon, order=700)

@hooks.register('register_admin_urls')
def register_unpublished_changes_report_url():
    return [
        path('reports/unpublished-changes/', UnpublishedChangesReportView.as_view(), name='unpublished_changes_report'),
    ]
{# <project>/templates/reports/unpublished_changes_report.html #}

{% extends 'wagtailadmin/reports/base_page_report.html' %}

{% block listing %}
    {% include 'reports/include/_list_unpublished_changes.html' %}
{% endblock %}

{% block no_results %}
    <p>No pages with unpublished changes.</p>
{% endblock %}
{# <project>/templates/reports/include/_list_unpublished_changes.html #}

{% extends 'wagtailadmin/reports/listing/_list_page_report.html' %}

{% block extra_columns %}
    <th>Last Published</th>
{% endblock %}

{% block extra_page_data %}
    <td valign="top">
        {{ page.last_published_at }}
    </td>
{% endblock %}
  • Предыдущая Компоненты шаблона
  • Следующая Добавление новых типов задач

Содержание страницы

  • Добавление отчетов
    • Определение вашего отчета
      • Экспорт в электронные таблицы
      • Настройка шаблонов
    • Добавление пункта меню и URL-адреса административной панели
    • Полный код

© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v2.16.3/extending/adding_reports.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API