{% for %}

{%for%}{%endfor%}标签将遍历集合中的每个值。 集合可以是实现Traversable接口的数组或对象。

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

您还可以访问键和值:

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

如果集合为空,则可以使用else渲染替换块(居然还有这骚操作):

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

循环集合

如果你确实需要迭代一组数字,你可以使用..运算符:

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

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

它也适用于字母:

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

··运算符可以在两边表达任何表达式:

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

添加条件

与PHP不同,在循环中没有“break”或“continue”的功能,但是你仍然可以过滤集合。 以下示例跳过所有未激活的users

  1. <ul>
  2. {% for user in users if user.active %}
  3. <li>{{ user.username }}</li>
  4. {% endfor %}
  5. </ul>

循环变量

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

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