【问题标题】:How do you display an external link from a stream field in a template?如何在模板中显示来自流字段的外部链接?
【发布时间】:2021-08-26 23:23:01
【问题描述】:

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

我想让编辑器嵌入也是超链接的图像,以便图像可点击并重定向到外部链接。文档说使用 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,它们根本不会出现在模板中。

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

【问题讨论】:

  • 我不知道您所说的“以编程方式处理链接(而不是作为编辑器)”是什么意思 - 我建议您将其作为一个单独的问题打开,详细说明您想要什么去做。

标签: wagtail wagtail-streamfield wagtail-snippet


【解决方案1】:

如template rendering 文档中所述:当您遍历 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 %}

【讨论】:

  • 感谢您的回复。老实说,我根本不想为此编写代码。我只是想处理我认为非常常见的情况,即拥有一个超链接的图像。似乎没有任何默认方式可以做到这一点,这让我感到非常惊讶。我希望 Wagtail 开箱即用。您可以在 RichTextField 中插入嵌入内容,可以插入图片,也可以插入链接,但不能插入同时也是链接的图片。
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 2021-02-23
  • 2012-12-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2017-08-10
  • 2019-04-15
相关资源
最近更新 更多