在Wagtail的Snippets中使用StreamField

时间:2016-05-05 12:48:30

标签: python django wagtail wagtail-streamfield wagtail-snippet

我正在尝试在Wagtail网站上构建一些结构化代码段。我查看了documentation,但在这一点上什么都没看到(如果我错过了,请原谅我)。

是否可以在代码段内使用StreamField?或者,仅限于页面

1 个答案:

答案 0 :(得分:9)

,您绝对可以将Streamfield添加到代码段中。它的工作原理与在Wagtail Page子类上使用它的方式相同。以下是它的一个例子:

from wagtail.wagtailsnippets.models import register_snippet
from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel

@register_snippet
class Contact(models.Model):
    contact_info = StreamField([
        ('email', MyBlocks.ContactEmail()),
        ('phone', MyBlocks.ContactPhone()),
        ('address', MyBlocks.ContactAddress()),
    ])

    panels = [StreamFieldPanel('contact_info')]

您没有要求的额外内容: Streamfield是一个Django模型字段,因此它在您定义的任何模型上的工作方式相同。实际上,Streamfield只是保存为JSON字符串。唯一让它与众不同的是块。在Streamfield的第一个参数中定义的块实际上只是定义了Streamfield可用于生成内容的可用选项。这些块本身与用于CRUD操作的SQL无关,它们仅用于操作为Streamfield保存的数据。

希望有所帮助。