Django Wagtail向流块添加设置的正确方法

Django Wagtail向流块添加设置的正确方法,django,wagtail,Django,Wagtail,假设我们有一个流块,如下所示: class CarouselStreamBlock(StreamBlock): image = StructBlock([ ('file', ImageChooserBlock()), ('caption', RichTextBlock( classname='caption' )), ]) 我们有一个场景,我们想给管理员编辑器的能力,设置每个转盘的宽度,高度,颜色等 我尝试将该设置作为另一个结构块添加到旋转

假设我们有一个流块,如下所示:

class CarouselStreamBlock(StreamBlock):

    image = StructBlock([
        ('file', ImageChooserBlock()),
        ('caption', RichTextBlock( classname='caption'  )),

    ])
我们有一个场景,我们想给管理员编辑器的能力,设置每个转盘的宽度,高度,颜色等

我尝试将该设置作为另一个结构块添加到旋转木马本身,最大长度为1

  class CarouselStreamBlock(StreamBlock):
     settings = StructBlock([
                ('align', blocks.ChoiceBlock(choices=[('center', 'Center'), ('right', 'Right'), ('left', 'Left'), ], default='center', max_length=10) ),
                ('width', blocks.IntegerBlock(required=False ) ),
                ('background_color', blocks.CharBlock(max_length=10, required=False))
            ], icon='cog' )

    image = StructBlock([
                ('file', ImageChooserBlock()),
                ('caption', RichTextBlock( classname='caption'  )),

            ])
但我对这种方式并不满意。有更好的方法吗?

a由一系列不同类型的子块组成。换句话说,所有块都将是彼此的兄弟,而设置实际上应该是图像块或旋转木马块本身的一部分

如果每个图像都需要自己的设置,可以执行以下操作:

class CustomImage(blocks.StructBlock):
    file = ImageChooserBlock()
    caption = RichTextBlock(classname='caption')

    align = blocks.ChoiceBlock(
        choices=[('center', 'Center'), ('right', 'Right'), ('left', 'Left')],
        default='center',
        max_length=10,
    )
    width = blocks.IntegerBlock(required=False)
    background_color = blocks.CharBlock(max_length=10, required=False)

class CarouselStreamBlock(blocks.StreamBlock):
    image = CustomImage()

class MyPage(Page):
    carousel = StreamField(CarouselStreamBlock())
但是,如果在所有图像之间共享设置,则可以执行以下操作:

class CustomImage(blocks.StructBlock):
    file = ImageChooserBlock()
    caption = RichTextBlock(classname='caption')

class CarouselStreamBlock(blocks.StructBlock):
    align = blocks.ChoiceBlock(
        choices=[('center', 'Center'), ('right', 'Right'), ('left', 'Left')],
        default='center',
        max_length=10,
    )
    width = blocks.IntegerBlock(required=False)
    background_color = blocks.CharBlock(max_length=10, required=False)

    images = blocks.ListBlock(CustomImage())

class MyPage(Page):
    carousel = StreamField(CarouselStreamBlock())
A由一系列不同类型的子块组成。换句话说,所有块都将是彼此的兄弟,而设置实际上应该是图像块或旋转木马块本身的一部分

如果每个图像都需要自己的设置,可以执行以下操作:

class CustomImage(blocks.StructBlock):
    file = ImageChooserBlock()
    caption = RichTextBlock(classname='caption')

    align = blocks.ChoiceBlock(
        choices=[('center', 'Center'), ('right', 'Right'), ('left', 'Left')],
        default='center',
        max_length=10,
    )
    width = blocks.IntegerBlock(required=False)
    background_color = blocks.CharBlock(max_length=10, required=False)

class CarouselStreamBlock(blocks.StreamBlock):
    image = CustomImage()

class MyPage(Page):
    carousel = StreamField(CarouselStreamBlock())
但是,如果在所有图像之间共享设置,则可以执行以下操作:

class CustomImage(blocks.StructBlock):
    file = ImageChooserBlock()
    caption = RichTextBlock(classname='caption')

class CarouselStreamBlock(blocks.StructBlock):
    align = blocks.ChoiceBlock(
        choices=[('center', 'Center'), ('right', 'Right'), ('left', 'Left')],
        default='center',
        max_length=10,
    )
    width = blocks.IntegerBlock(required=False)
    background_color = blocks.CharBlock(max_length=10, required=False)

    images = blocks.ListBlock(CustomImage())

class MyPage(Page):
    carousel = StreamField(CarouselStreamBlock())