如何在 wagtail 中创建自定义块?

问题描述 投票:0回答:1

这是我的

StreamField
:

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

我的问题是:如何添加我自己的可以传递给

StreamField
的块?我的意思是包含多个图像的块,例如块?我在 wagtail 文档中没有找到我的问题的答案。

django image wagtail
1个回答
6
投票

我的意思是包含多个图像的块,类似于块?

这是您可以尝试的示例,我不确定您具体想要实现什么目标,所以我将其保留为相当通用,但可以根据您的喜好进行修改。

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 是多么出色。有时您需要将它们组合起来构建满足您需求的特定结构。

© www.soinside.com 2019 - 2024. All rights reserved.