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 %}
提示
如果需要与 1 不同的步长,可以使用 range 函数代替。
loop 变量
在 for 循环块内,您可以访问一些特殊变量
| 变量 | 描述 |
|---|---|
loop.index |
循环的当前迭代。(1 索引) |
loop.index0 |
循环的当前迭代。(0 索引) |
loop.revindex |
从循环结束开始的迭代次数(1 索引) |
loop.revindex0 |
从循环结束开始的迭代次数(0 索引) |
loop.first |
如果是第一次迭代,则为 True |
loop.last |
如果是最后一次迭代,则为 True |
loop.length |
序列中的项目数 |
loop.parent |
父上下文 |
1 2 3
{% for user in users %}
{{ loop.index }} - {{ user.username }}
{% endfor %}
注意
loop.length、loop.revindex、loop.revindex0 和 loop.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>