0

很抱歉,我不得不问这个问题,因为它看起来很简单,但我已经搜索了几个小时的文档来寻找答案。场景是:

我想让编辑器嵌入也是超链接的图像,这样图像就可以点击并重定向到外部链接。文档说使用 StreamField。好的,我用 StreamField 建立了一个模型:

@register_snippet
class EventPageEntry(Orderable):
    page = ParentalKey(EventPage, on_delete=models.CASCADE, related_name='event_entries')

    heading = RichTextField(max_length=160)
    body = StreamField([
        ('paragraph', blocks.RichTextBlock()),
        ('rich_image', blocks.StructBlock([
            ('image', ImageChooserBlock()),
            ('image_link', blocks.URLBlock())
        ]))
    ])

我的模板如下所示:

<div class="accordion-body">
                                         {% for block in event_entry.body %}
                                                {%  if block.block_type == 'paragraph' %}
                                                    {{ block.value | richtext }}
                                                {% endif %}
                                                {% if block.block_type == 'rich_image' %}
                                                    {% image block.image fill-320x320 %}
                                                    <a href="{{ block.image_link }}">LINK TEXT</a>
                                                {% endif %}
                                            {% endfor %}
                                        </div>

所以这就是发生的事情:

段落工作正常。我可以插入富文本块,它们完全按预期显示。

添加rich_image 时,我看不到任何图像。在锚元素中,出现 LINK TEXT,但没有超链接(空字符串)。

我回到鹡鸰编辑器,瞧瞧图像和链接就在那里。是的,我正在保存草稿并发布页面。

这样做的正确方法是什么?wagtail 编辑器看起来不错,它允许我在编辑器中插入图像和外部 URL,它们根本不会出现在模板中。

此外,如果我错过了有关如何以编程方式处理链接(而不是作为编辑器)的文档的某些隐藏部分,请告诉我我是个白痴并将我链接到该页面。我就是找不到。

4

1 回答 1

0

模板渲染文档中所述:当您循环遍历 StreamField ( {% for block in event_entry.body %})中的块时,block您返回的对象具有两个属性,block_type并且value. 这适用于所有块类型,包括 StructBlock - 唯一的区别是value属性中的值类型。在 StructBlock 的情况下,value是一个包含您定义的各个子块的数据的字典 - 因此要输出数据,您需要查看block.value,而不仅仅是block.

{% if block.block_type == 'rich_image' %}
    {% image block.value.image fill-320x320 %}
    <a href="{{ block.value.image_link }}">LINK TEXT</a>
{% endif %}
于 2021-08-27T00:42:38.577 回答