代码之家  ›  专栏  ›  技术社区  ›  matousc

wagtail列表块-如何访问模板中的第一个(任何)元素?

  •  0
  • matousc  · 技术社区  · 6 年前

    我叫了ListBlock images 在Wagtail。它运作良好。如果我放

    page.images_

    在模板中,它将HTML代码呈现为:

    <ul>
      <li>item1</li>
      <li>item2</li> 
    </ul>
    

    但我不知道如何将列表中的第一项隔离开来。或者至少如何手动遍历列表。

    我很确定这个解决方案很简单,但是我不能通过谷歌搜索,在文档中找到它,或者从Wagtail源代码中理解它。

    1 回复  |  直到 6 年前
        1
  •  1
  •   gasman    6 年前

    您还没有共享您的模型定义,但我想应该是这样的:

    class MyPage(Page):
        images = StreamField([
            ('image_list', blocks.ListBlock(blocks.ImageChooserBlock)),
        ])
    

    使用标准模式 manually looping over a StreamField value 如Wagtail文档所示,这将是:

    {% 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仍然定义为块列表,即使该列表中只有一个项。