Как создать пользовательский блок в трясогузке? - PullRequest
0 голосов
/ 24 июня 2019

Это мой StreamField:

body = StreamField([
    ('heading', blocks.CharBlock(classname="full title")),
    ('paragraph', blocks.RichTextBlock()),
    ('image', ImageChooserBlock()),
])

И мой вопрос: как добавить мой собственный Блок, который я могу передать StreamField?Я имел в виду блок, который содержит несколько изображений, что-то вроде блока?Я не нашел ответа на свой вопрос в документации по трясогузке.

1 Ответ

0 голосов
/ 26 июля 2019

Когда вы спросили:

Я имел в виду блок, содержащий несколько изображений, что-то вроде блока?

Вот пример того, что вы могли бы попробовать, я не уверен, чего конкретно вы пытаетесь достичь, поэтому я оставил это довольно общим, но измените его, как вам нравится.

class GalleryBlock(blocks.StructBlock):
    """
    Nameable gallery with multiple images.
    """
    name = blocks.CharBlock(required=True)
    images = blocks.ListBlock(
        blocks.StructBlock([
            ("image", ImageChooserBlock(required=True)),
            ("alt_text", blocks.CharBlock(required=False, max_length=100)),
        ])
    )

Тогда вам, конечно, нужно добавить это в ваш StreamField для body.

Нечто подобное может быть.

body = StreamField([
    ('heading', blocks.CharBlock(classname="full title")),
    ('paragraph', blocks.RichTextBlock()),
    ('image', ImageChooserBlock()),
    ('gallery', GalleryBlock(icon='image')), # add this line
])

Надеюсь, это поможет вам увидеть, насколько гибкими и удивительными являются эти встроенные блоки и насколько замечательным может быть StreamField. Иногда вам нужно объединить их, чтобы создать определенную структуру для ваших нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...