You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jinja2统计同名事件数量时计数错误如何解决

Jinja2同名事件计数异常问题解决

错误原因

你原有代码计数异常的核心原因是Jinja2的块级作用域限制:普通set定义的变量无法在嵌套的for循环内部修改后同步到外层作用域,你在内层循环里写的{% set count = count + 1 %}本质是创建了一个内层局部的count变量,根本没有修改外层初始化的count值,因此循环结束后外层count始终为初始值0,无法得到正确统计结果。

解决方法

方法1:使用namespace跨作用域修改变量(适配原有逻辑)

Jinja2 2.10及以上版本支持namespace对象,其属性可以跨作用域修改,不会被内层作用域隔离,适配你原有写法的修改后代码如下:

{% for event in events %}
    {% set counter = namespace(count=0) %}
    <tr>
        <td>{{ event.name }}</td>
        {% for ticket in tickets %}
            {% if ticket.event_name == event.name %}
                {% set counter.count = counter.count + 1 %}
            {% endif %}
        {% endfor %}
        <td>{{ counter.count }}</td>
    </tr>
{% endfor %}

方法2:使用内置过滤器简化实现(更高效)

直接用Jinja2内置的selectattr过滤器筛选匹配的ticket,再用length获取数量,无需手动写循环计数,代码更简洁性能也更好:

{% for event in events %}
<tr>
    <td>{{ event.name }}</td>
    <td>{{ tickets | selectattr("event_name", "equalto", event.name) | list | length }}</td>
</tr>
{% endfor %}

内容的提问来源于stack exchange,提问作者maxiflo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 14:15:10