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>