计算Jinja2模板中的多个for循环

时间:2014-02-07 18:38:34

标签: python html jinja2

我试图通过使用需要在多个循环之间保持其值的变量来计数。我的变量似乎在每个循环之间丢失(重置为0)。这是我正在使用的代码:

{% for state in csvrows|groupby('state') %}
      <tr class="staterow"><td valign="baseline" class="state" colspan="6">{{ state.grouper }}</td><tr>
    {% for city in state.list|groupby('city') %}
        {% for row in city.list %}
        <tr><td class="spacer"></td>
                <td class="city">{% if loop.first %}{{ row.city }}{% endif %}</td>
                <td class="app">{{ row.application_name }}</td>
                <td class="risk">{{ row.risk }}</td>
                <td class="title">{{ row.title }}</td>
                <td class="remediation">{{ row.expected_remediation_date }}</td>

            {% if row.risk|lower == "critical" %}
            {% set crit = crit  + 1 %}
            {% endif %}
            {% if row.risk|lower == "high" %}
            {% set high = high + 1 %}
            {% endif %}
            {% if row.risk == "Medium" %}
            {% set med = med + 1 %}
            {% endif %}
            {% if row.risk|lower == "low" %}
            {% set low = low + 1 %}
            {% endif %}
            {% if row.risk|lower == "informational" %}
            {% set info = info + 1 %}
            {% endif %}

                <td>C: {{ crit }} H:{{ high }} M:{{ med }} L:{{ low }} I:{{ info }}</td>
            </tr>
        {% endfor %}
    {% endfor %}
{% endfor %}

每次state.list|groupby('city')循环再次开始时,我都会失去crit, high, med, low and info的值。

如何附加这些值并在state.list|groupby('city')循环的迭代之间保持值?

1 个答案:

答案 0 :(得分:0)

您可以在循环前crit

定义highmedlowinfo{% for city in state.list|groupby('city') %}

{% for state in csvrows|groupby('state') %}
     <tr class="staterow"><td valign="baseline" class="state" colspan="6">{{ state.grouper }}</td><tr>
    {% set crit = 0 %}
    {% set high = 0 %}
    {% set med = 0 %}
    {% set low = 0 %}
    {% set info = 0 %}
    {% for city in state.list|groupby('city') %}
        {% for row in city.list %}
        <tr><td class="spacer"></td>
        ...
        ...
        ...
        {% if row.risk|lower == "critical" %}
        {% set crit = crit  + 1 %}
        {% endif %}
        {% if row.risk|lower == "high" %}
        {% set high = high + 1 %}
        {% endif %}
        {% if row.risk == "Medium" %}
        {% set med = med + 1 %}
        {% endif %}
        {% if row.risk|lower == "low" %}
        {% set low = low + 1 %}
        {% endif %}
        {% if row.risk|lower == "informational" %}
        {% set info = info + 1 %}
        {% endif %}
        ...
        ...

希望这可以帮到你。

我的示例代码在这里

@app.route('/')
def index():
    render = """
    {% set val = 0 %}
    {% for i in [0, 1, 2, 3] %}
    {% set val = val + 2 %}
    <h3>{{ val }}</h3>
    {% endfor %}
    """
    return render_template_string(render)

以上将呈现

  
    

2

4

6

8