如何在模板中的流字段中显示外部 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_type
和 value
。这适用于所有块类型,包括 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 %}
很抱歉我不得不问这个问题,因为它看起来很简单,但我已经在文档中搜索了几个小时来寻找答案。场景是:
我想让编辑器嵌入也是 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_type
和 value
。这适用于所有块类型,包括 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 %}