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())