Wagtail ListBlock - 如何访问模板中的第一个(任何)元素?
Wagtail ListBlock - how to access first (any) element in template?
我在 Wagtail 中有一个名为 images
的 ListBlock。它运作良好。如果我把
{{ page.images }}
在模板中,它呈现 html 代码如下:
<ul>
<li>item1</li>
<li>item2</li>
</ul>
但我无法找出如何隔离列表的第一项。或者至少如何手动遍历列表。
我很确定解决方案很简单,但是我无法google它,无法在文档中找到它,也无法从 wagtail 源中理解。
你还没有分享你的模型定义,但我猜它是这样的:
class MyPage(Page):
images = StreamField([
('image_list', blocks.ListBlock(blocks.ImageChooserBlock)),
])
如 Wagtail 文档中所示,使用 manually looping over a StreamField value 的标准模式,这将是:
{% for block in page.images %}
{% if block.block_type == 'image_list' %}
{# at this point block.value gives you the images as an ordinary Python list #}
{# Output the first image using block.value.0: #}
{% image block.value.0 width-800 %}
{# Or loop over block.value manually with a 'for' loop #}
<ul>
{% for img in block.value %}
<li>{% image img width-800 %}</li>
{% endfor %}
</ul>
{% elif block.block_type == 'some_other_block' %}
...
{% else %}
...
{% endif %}
{% endfor %}
在这种情况下,您可能只定义了一种块类型 (image_list
),因此可以省略 if block.block_type == 'image_list'
;但是你仍然需要外部 {% for block in page.images %}
,因为 StreamField 仍然被定义为一个块列表,即使你在该列表中只有一个项目。
我在 Wagtail 中有一个名为 images
的 ListBlock。它运作良好。如果我把
{{ page.images }}
在模板中,它呈现 html 代码如下:
<ul>
<li>item1</li>
<li>item2</li>
</ul>
但我无法找出如何隔离列表的第一项。或者至少如何手动遍历列表。
我很确定解决方案很简单,但是我无法google它,无法在文档中找到它,也无法从 wagtail 源中理解。
你还没有分享你的模型定义,但我猜它是这样的:
class MyPage(Page):
images = StreamField([
('image_list', blocks.ListBlock(blocks.ImageChooserBlock)),
])
如 Wagtail 文档中所示,使用 manually looping over a StreamField value 的标准模式,这将是:
{% for block in page.images %}
{% if block.block_type == 'image_list' %}
{# at this point block.value gives you the images as an ordinary Python list #}
{# Output the first image using block.value.0: #}
{% image block.value.0 width-800 %}
{# Or loop over block.value manually with a 'for' loop #}
<ul>
{% for img in block.value %}
<li>{% image img width-800 %}</li>
{% endfor %}
</ul>
{% elif block.block_type == 'some_other_block' %}
...
{% else %}
...
{% endif %}
{% endfor %}
在这种情况下,您可能只定义了一种块类型 (image_list
),因此可以省略 if block.block_type == 'image_list'
;但是你仍然需要外部 {% for block in page.images %}
,因为 StreamField 仍然被定义为一个块列表,即使你在该列表中只有一个项目。