Wagtail ListBlock - как получить доступ к первому (любому) элементу в шаблоне? - PullRequest
0 голосов
/ 27 января 2019

У меня ListBlock с именем images в трясогузке. Это работает хорошо. Если я поставлю

{{page.images}}

в шаблоне, он отображает HTML-код как:

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

Но я не могу выяснить, как выделить первый элемент списка. Или, по крайней мере, как перебирать список вручную.

Я почти уверен, что решение простое, однако я не могу его найти, найти в документации или понять из трясогузки.

1 Ответ

0 голосов
/ 27 января 2019

Вы не поделились определением своей модели, но я собираюсь догадаться, что это что-то вроде:

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

Использование стандартного шаблона для ручное зацикливание значения StreamField какпоказанный в документах по трясогузке, это будет:

{% 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 по-прежнему определяется как список блоков, даже если у вас есть только один элемент в этом списке.

...