Tags › for

Table of Contents

← tags

Loop over each item in a sequence (also see iterators). For example, to display a list of users provided in a variable called users:

<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

Note that Lua tables (no array) are not ordered.

Note how the tag works with different data

The else clause #

If no iteration took place because the sequence was empty, you can render a replacement block by using else:

<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% else %}
        <li><em>no user found</em></li>
    {% endfor %}
</ul>

The break clause #

Break ends execution of the current for loop

<ul>
{% for key in users %}
    <li>{{ users.name }}</li>
    {% if loop.index > 10 %}
    <li>and more</li>
        {% break %}   
    {% endif %}
{% endfor %}
</ul>

Iterating over Keys #

By default, a loop iterates over the values of the sequence. You can iterate on keys by using the keys filter:

<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

Iterating over Keys and Values #

You can also access both keys and values:

<h1>Members</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

The loop variable #

Inside of a for loop block you can access some special variables:

Variable Description
loop.index The current iteration of the loop. (1 indexed)
loop.index0 The current iteration of the loop. (0 indexed)
loop.revindex The number of iterations from the end of the loop (1 indexed)
loop.revindex0 The number of iterations from the end of the loop (0 indexed)
loop.first True if first iteration
loop.last True if last iteration
loop.length The number of items in the sequence
loop.parent The parent context
loop.prev_item The item from the previous iteration of the loop. Nil during the first iteration.
loop.next_item The item from the following iteration of the loop. Nil during the last iteration.
loop.has_more True if has more items.