首页 > 解决方案 > 在 Python Jinja 模板中的 for 循环内应用 if 语句

问题描述

我得到了这个简单的 HTML 模板:

{% block html_page %}
    {% set counter = 1 %}    
    {% for field in fields %}
        COUNTER: {{ counter }} <br>
        {% set counter = counter+1 %}

    {% endfor %}

{% endblock %}

其中fields包含 4 个项目。

输出是:

COUNTER: 1 
COUNTER: 1 
COUNTER: 1 
COUNTER: 1

虽然我想要的输出应该是计数器增加:

COUNTER: 1 
COUNTER: 2 
COUNTER: 3 
COUNTER: 4

计数器分配是在 for 循环内完成的,所以我不明白为什么它一直返回到 1。

有什么建议么?

标签: pythonhtmlif-statementflaskjinja2

解决方案


由于 Jinja 中的范围规则,这不起作用。

在 Jinja 2.10 之后,要解决范围问题,您可以这样做:

{% set count = namespace(a=0) %}
{% for field in fields %}
  {{ count.a }}
  {% set count.a = count.a + 1 %}
{% endfor %}

或者你可以使用 loop.index:

{% for field in fields %}
  {{ loop.index }}
{% endfor %}

推荐阅读