231

我希望能够将当前循环迭代输出到我的模板。

根据文档loop.counter,我正在尝试使用一个变量:

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{loop.counter}}
  </li>
      {% if loop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>

但是正在输出到我的模板。什么是正确的语法?

4

5 回答 5

487

循环内的计数器变量loop.index在 Jinja2 中被调用。

>>> from jinja2 import Template

>>> s = "{% for element in elements %}{{loop.index}} {% endfor %}"
>>> Template(s).render(elements=["a", "b", "c", "d"])
1 2 3 4

除此之外loop.index,还有

  • loop.index0(索引从 开始0
  • loop.revindex(反向索引;结束于1
  • loop.revindex0(反向索引;结束于0
  • 更多信息请访问http://jinja.pocoo.org/docs/templates/
于 2012-08-27T18:08:59.213 回答
61

for-loop 块内部,您可以访问一些特殊变量,例如loop.index(but not loop.counter)。来自官方文档

多变的 描述
loop.index 循环的当前迭代。(1 个索引)
loop.index0 循环的当前迭代。(0 索引)
loop.revindex 从循环结束的迭代次数(1索引)
loop.revindex0 从循环结束的迭代次数(0索引)
loop.first 如果是第一次迭代,则为真。
loop.last 如果最后一次迭代则为真。
loop.length 序列中的项目数。
loop.cycle 在序列列表之间循环的辅助函数。
loop.depth 指示当前渲染在递归循环中的深度。从 1 级开始
loop.depth0 指示当前渲染在递归循环中的深度。从 0 级开始
loop.previtem 循环上一次迭代中的项目。在第一次迭代期间未定义。
loop.nextitem 来自循环的以下迭代的项目。在最后一次迭代期间未定义。
loop.changed(*val) 如果以前使用不同的值调用(或根本没有调用),则为真。
于 2014-07-25T15:24:05.613 回答
25

如果您使用的是 Django,请使用forloop.counter代替loop.counter

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>
于 2019-01-10T02:52:37.217 回答
0

现实生活中的例子:

{% for image in item['images'] %}
    {% set image_id = item_id ~ '-preview-' ~ loop.index0 %}
    <div id="{{ image_id }}" class="overlay">
        <a class="cancel" href="#{{ item_id }}"></a>
        <div class="popup">
            {% set src = image if image.startswith('http') else '/static/images/store/' ~ item_id ~ '/' ~ image %}
            <a href="{{ src }}"><img class="modal-img" src="{{ src }}"/></a>
        </div>
    </div>
{% endfor %}
于 2021-08-06T15:48:36.397 回答
-1

在您的 Python 代码中:

env = Environment(loader=FileSystemLoader("templates"))
env.globals["enumerate"] = enumerate

在您的模板中:

{% for idx, val in enumerate(list) %}
    {{ idx }}. {{val}}
{% endfor %}
于 2020-11-13T17:32:25.770 回答