Типизированный блок таблицы
Модуль typed_table_block предоставляет тип блока StreamField для создания таблиц, состоящих из смешанных типов данных. Разработчики могут указать набор типов блоков (например, RichTextBlock или FloatBlock) для использования в качестве типов столбцов; авторы страниц могут затем создавать таблицы любого размера, выбирая типы столбцов из этого списка, так же, как они бы вставляли блоки в StreamField. Внутри каждого столбца авторы вводят данные, используя стандартное средство редактирования для этого поля (например, редактор Draftail для ячеек с богатым текстом).
Установка
Добавьте "wagtail.contrib.typed_table_block" в свой INSTALLED_APPS:
INSTALLED_APPS = [
...
"wagtail.contrib.typed_table_block",
]
Использование
TypedTableBlock можно импортировать из модуля wagtail.contrib.typed_table_block.blocks и использовать в определении StreamField. Как и StructBlock и StreamBlock, оно принимает список кортежей (name, block_type) для использования в качестве дочерних блоков:
from wagtail.contrib.typed_table_block.blocks import TypedTableBlock
from wagtail import blocks
from wagtail.images.blocks import ImageChooserBlock
class DemoStreamBlock(blocks.StreamBlock):
title = blocks.CharBlock()
paragraph = blocks.RichTextBlock()
table = TypedTableBlock([
('text', blocks.CharBlock()),
('numeric', blocks.FloatBlock()),
('rich_text', blocks.RichTextBlock()),
('image', ImageChooserBlock())
])
Для упрощения пользовательского интерфейса для авторов рекомендуется использовать базовые встроенные типы блоков Wagtail в качестве типов столбцов, как показано выше. Однако поддерживаются все типы и параметры пользовательских блоков. Например, чтобы определить тип столбца «страна», состоящий из выпадающего списка вариантов стран:
table = TypedTableBlock([
('text', blocks.CharBlock()),
('numeric', blocks.FloatBlock()),
('rich_text', blocks.RichTextBlock()),
('image', ImageChooserBlock()),
('country', ChoiceBlock(choices=[
('be', 'Belgium'),
('fr', 'France'),
('de', 'Germany'),
('nl', 'Netherlands'),
('pl', 'Poland'),
('uk', 'United Kingdom'),
])),
])
На вашей шаблонной странице тег {% include_block %} (вызываемый либо для отдельного блока, либо для значения StreamField в целом) отобразит любые типизированные блоки таблиц как HTML-элемент <table>.
{% load wagtailcore_tags %}
{% include_block page.body %}
Или:
{% load wagtailcore_tags %}
{% for block in page.body %}
{% if block.block_type == 'table' %}
{% include_block block %}
{% else %}
{# rendering for other block types #}
{% endif %}
{% endfor %}
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/reference/contrib/typed_table_block.html