繁体   English   中英

Wagtail - 如何在嵌套块中设置富文本值 (StreamField->StructBlock->RichTextBlock)

[英]Wagtail - How to set rich text value in nested block (StreamField->StructBlock->RichTextBlock)

我有以下结构:

`class ParagraphWithRelatedLinkBlock(blocks.StructBlock):
    text = blocks.RichTextBlock()
    related_link = blocks.ListBlock(blocks.URLBlock())

class BlogPageSF(Page):
    body = StreamField(
        [
            ("paragraph", ParagraphWithRelatedLinkBlock(),
        ], use_json_field=True
)`

我想从脚本或 Django shell 设置“文本”字段的值(不是通过 Wagtail 管理站点)。

我怎样才能做到这一点?

我曾尝试在 shell 中执行以下操作:

`p = BlogPageSF()
rt = RichTextBlock('Test')
pb = ParagraphWithRelatedLinkBlock()
pb.text = rt
p.body.append(('paragraph', pb))
p.save()`

我希望 ParagraphWithRelatedLinkBlock 中的“文本”字段的值为“测试”

但我收到错误:AttributeError: 'ParagraphWithRelatedLinkBlock' object has no attribute 'items'

您插入 StreamField 数据的值不应是 Block class 的实例 - 块实例仅用作 stream 定义的一部分(例如,当您编写text = blocks.RichTextBlock()时,您正在创建 RichTextBlock 的实例ParagraphWithRelatedLinkBlock定义的 forms 部分)。

正确的数据类型要么是简单的 Python 值,例如 StructBlock 的dict ,要么是专用值类型,例如 RichTextBlock 的wagtail.rich_text.RichText 因此,对于 ParagraphWithRelatedLinkBlock,您需要提供一个包含 RichText 值的字典:

from wagtail.rich_text import RichText

p = BlogPageSF()
p.body.append(('paragraph', {'text': RichText('Test')}))
p.save()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM