axo*_*asm 5 python wagtail wagtail-streamfield
我有一个 Wagtail 项目,有两个不同的Page模型,它们使用相同的画廊块,但方式不同。在一个模型中,我想在其他自由形式块的列表中使用图库;但在另一种模型中,只有一个画廊出现在页面上的特定位置。画廊非常复杂,有很多选项,例如autoadvance我不想在模型之间重复,并且很难将其移动到 mixin 中。gallery我可以通过向严格模型添加额外的 StreamField 来完成我想要的,如下所示:(content_panel等省略)
# models.py\nfrom wagtail.models import Page\nfrom wagtail.core.fields import RichTextField, StreamField\nfrom wagtail.images.blocks import ImageChooserBlock\nfrom wagtail.core.blocks import (\n RichTextBlock, \n StructBlock, \n StreamBlock,\n)\n\nclass ImageWithCaptionBlock(StructBlock):\n image = ImageChooserBlock()\n caption = RichTextBlock()\n\n\nclass GalleryBlock(StructBlock):\n # lots of gallery options like \xe2\x80\x9cautoadvance\xe2\x80\x9d\n items = StreamBlock([\n (\'image\', ImageWithCaptionBlock()),\n (\'video\', EmbedBlock()),\n ]) \n\n\nclass FreeFormContentPage(Page):\n body = StreamField([\n (\'richtext\', RichTextBlock()),\n (\'gallery\', GalleryBlock()),\n ], use_json_field=True)\n\n\nclass StrictContentPage(Page):\n body = RichTextField()\n gallery = StreamField([\n (\'gallery\', GalleryBlock()),\n ], use_json_field=True, max_num=1)\n\nRun Code Online (Sandbox Code Playgroud)\n这可行,但在编辑 ! 时看起来有点奇怪StrictContentPage!
我\xe2\x80\x99m 想做的是这样的:
\n\nclass StrictContentPage(Page):\n body = RichTextField()\n gallery = GalleryBlock()\n\nRun Code Online (Sandbox Code Playgroud)\n(或通过调整管理员进行等效操作)
\n\xe2\x80\xa6 以便管理体验如下所示:
\n\n预先感谢您的任何指点!
\n小智 1
StreamBlock如果您仍然需要这个,我会以为/内的内容创建变量的心态来处理它StreamField。
考虑以下示例:
\nclass ImageWithCaptionBlock(StructBlock):\n image = ImageChooserBlock()\n caption = RichTextBlock()\n\nGALLERY_BLOCKS = [\n (\'image\', ImageWithCaptionBlock()),\n (\'video\', EmbedBlock()),\n]\n\nclass GalleryBlock(StructBlock):\n # lots of gallery options like \xe2\x80\x9cautoadvance\xe2\x80\x9d\n items = StreamBlock(GALLERY_BLOCKS) \n\nclass FreeFormContentPage(Page):\n body = StreamField([\n (\'richtext\', RichTextBlock()),\n (\'gallery\', GalleryBlock()),\n ], use_json_field=True)\n\nclass StrictContentPage(Page):\n body = RichTextField()\n gallery = StreamField(GALLERY_BLOCKS, use_json_field=True)\nRun Code Online (Sandbox Code Playgroud)\n这种方法将使StrictContentPage页面版本的 UI 更具可读性,并保持版本相同的用户体验FreeFormContentPage。另外,您不需要多余的代码来更改不同页面类型的字段。
我希望这能帮助你。祝你有美好的一天!
\n| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |