for

按顺序循环每个项目。例如,要显示在名为 users

1
2
3
4
5
6
<h1>Members</h1>
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

注解

序列可以是数组,也可以是实现 Traversable 接口。

如果确实需要迭代一系列数字,可以使用 .. 操作员:

1
2
3
{% for i in 0..10 %}
    * {{ i }}
{% endfor %}

上面的代码片段将打印0到10之间的所有数字。

它也可以用于字母:

1
2
3
{% for letter in 'a'..'z' %}
    * {{ letter }}
{% endfor %}

这个 .. 运算符可以在两边使用任何表达式:

1
2
3
{% for letter in 'a'|upper..'z'|upper %}
    * {{ letter }}
{% endfor %}

这个 loop 变量

内部 for 循环块您可以访问一些特殊变量:

变量 描述
loop.index 循环的当前迭代。(1索引)
loop.index0 循环的当前迭代。(0索引)
loop.revindex 循环结束时的迭代次数(1个索引)
loop.revindex0 循环结束时的迭代次数(0个索引)
loop.first 如果第一次迭代为真
loop.last 如果最后一次迭代为真
loop.length 序列中的项目数
loop.parent 父上下文
1
2
3
{% for user in users %}
    {{ loop.index }} - {{ user.username }}
{% endfor %}

注解

这个 loop.lengthloop.revindexloop.revindex0loop.last 变量仅可用于PHP数组或实现 Countable 接口。

这个 else 条款

如果由于序列为空而未发生迭代,则可以使用 else

1
2
3
4
5
6
7
<ul>
    {% for user in users %}
        <li>{{ user.username|e }}</li>
    {% else %}
        <li><em>no user found</em></li>
    {% endfor %}
</ul>

遍历键

默认情况下,循环迭代序列的值。您可以使用 keys 过滤器:

1
2
3
4
5
6
<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

迭代键和值

您还可以访问键和值:

1
2
3
4
5
6
<h1>Members</h1>
<ul>
    {% for key, user in users %}
        <li>{{ key }}: {{ user.username|e }}</li>
    {% endfor %}
</ul>

迭代子集

您可能需要迭代一个子集的值。可以使用 slice 过滤器:

1
2
3
4
5
6
<h1>Top Ten Members</h1>
<ul>
    {% for user in users|slice(0, 10) %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>