簡體   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