如何在模板中的流字段中显示外部 link?

How do you display an external link from a stream field in a template?

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

我想让编辑器嵌入也是 hyperlink 的图像,这样图像就可以点击并重定向到外部 link。文档说使用 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 Text 块,它们的显示完全符合预期。

当我添加 rich_image 时,我看不到图像。在锚元素中,LINK TEXT 出现,但是 hyperlink 什么也没有(空字符串)。

我 return 到 wagtail 编辑器,你看图像和 link 在那里。是的,我正在保存草稿并发布页面。

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

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

template rendering 文档中所述:当您遍历 StreamField ({% for block in event_entry.body %}) 中的块时,返回的 block 对象具有两个属性,block_typevalue。这适用于所有块类型,包括 StructBlock - 唯一的区别是 value 属性 中值的种类。对于 StructBlock,value 是一个字典,其中包含您定义的各个子块的数据 - 因此要输出数据,您需要查看 block.value,而不仅仅是 [=12] =].

{% if block.block_type == 'rich_image' %}
    {% image block.value.image fill-320x320 %}
    <a href="{{ block.value.image_link }}">LINK TEXT</a>
{% endif %}