很抱歉我不得不问这个问题,因为它看起来很简单,但我一直在搜索文档数小时以寻找答案。场景是:
我想让编辑器嵌入也是超链接的图像,以便图像可点击并重定向到外部链接。文档说使用 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 编辑器,瞧,图像和链接都在那里。是的,我正在保存草稿并发布页面。
这样做的正确方法是什么?wagtail 编辑器看起来不错,它允许我在编辑器中插入图像和外部 URL,它们根本不会出现在模板中。
另外,如果文档中有一些隐藏的部分我错过了如何以编程方式处理链接(而不是作为编辑器)请告诉我我是个白痴并将我链接到页面。我就是找不到。
正如模板渲染文档中提到的:当您遍历 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 %}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句