首页 > 解决方案 > 如何在鹡鸰中创建自定义块?

问题描述

这是我的StreamField

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

我的问题是:如何添加我自己可以传递的块StreamField?我的意思是包含多个图像的块,比如块?我没有在 wagtail 文档中找到我的问题的答案。

标签: djangoimagewagtail

解决方案


当你问:

我的意思是包含多个图像的块,比如块?

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

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 可以多么令人敬畏。有时您需要将它们组合起来以构建满足您需求的特定结构。


推荐阅读