Wagtail ListBlock-如何访问模板中的第一个(任何)元素?

时间:2019-01-27 08:52:04

标签: django django-templates wagtail

我在Wagtail中有一个名为images的ListBlock。它运作良好。如果我放

  

{{page.images}}

在模板中,它呈现html代码,例如:

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

但是我无法找出如何将列表的第一项隔离出来。或至少如何手动遍历列表。

我非常确定解决方案很简单,但是我无法对其进行谷歌搜索,无法在文档中找到或无法从w源中了解。

1 个答案:

答案 0 :(得分:2)

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

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ComboBox cmb = (ComboBox)sender;
        int selectedIndex = cmb.SelectedIndex;
        int selectedValue = (int)cmb.SelectedValue;
        ComboboxItem selectedName = (ComboboxItem)cmb.SelectedItem;
    }

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

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

在这种情况下,您可能仅定义了一种块类型({% 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',因为StreamField仍被定义为块列表,即使您在该列表中只有一项。