【问题标题】:Correct way of adding EmbedBlock into StreamField via code?通过代码将 EmbedBlock 添加到 StreamField 的正确方法?
【发布时间】:2021-06-08 15:56:12
【问题描述】:

我有一个带有 StreamField 的页面模型:

from wagtail.core.fields import StreamField
from wagtail.embeds.blocks import EmbedBlock

class SomeModel(Page):
    stream_field = StreamField(
        [
            ("embed", EmbedBlock()),
        ]
    )

我想通过代码创建一个新的SomeModel 实例并使用嵌入值填充stream_field。例如

from wagtail.embeds.blocks import EmbedValue

some_model_instance = SomeModel()

embed_url = "https://youtube.com/something"

embed_value = EmbedValue(embed_url)

embed_block = ("embed", embed_value)

some_model_instance.stream_field.append(embed_block)

some_model_instance.save()

上面的代码模式可以正常工作,但是当我在 Wagtail 管理 UI 中查看内容时,该字段为空(好像没有提供任何内容)。

如何通过代码向 Wagtail StreamField EmbedBlock 添加内容?

【问题讨论】:

  • 我尝试将embed_value 包装在EmbedBlock 中,但出现错误:AttributeError: 'EmbedBlock' object has no attribute 'url'

标签: wagtail wagtail-streamfield


【解决方案1】:

我能够将 Embed 添加到 StreamField 的方式如下:

from wagtail.embeds.embeds import get_embed

some_model_instance = SomeModel()

embed_url = "https://youtube.com/something"

embed = get_embed(embed_url)

embed_block = ("embed", embed)

some_model_instance.stream_field.append(embed_block)

some_model_instance.save()

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多