jinja2:跟踪 for 循环中的前一个值

ibr*_*ter 7 python jinja2

在 jinja2 for 循环中,如何跟踪变量的前一个值(用于显示“组”之间的中断)?显而易见且直接的答案是:

{% set last_val='unk' %}
{% for object in data %}
    {% if object[0]!=last_val %}
        <output whatever separation code>
        {% set last_val=object[0] %}
    {% endif %}
    <other stuff>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

...由于 jinja2 的范围规则而不起作用 - 每次循环都会看到相同的“unk”。我该如何解决这个限制?

编辑:我正在研究我的一些旧代码,我在其中做了类似的事情,显然这确实适用于 jinja2 2.8,但在 2.9.6 之前的某个时候崩溃了。所以我想一种解决方案是降级到 2.8 并保持在那里。

Ben*_*n L 6

使用“loop.previtem”。


{% for object in data %}
    {% if loop.index0 ==0  %}
        <output whatever separation code>
        
    {% elif loop.index0 > 0 and loop.previtem[0] != object[0]  %}
        <output whatever separation code>
        
    {% endif %}
    <other stuff>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)


小智 0

jinja 无法更改变量的值,但您可以使用字典来更改键的值。这会起作用的。

  {% set last_val={'key':'unk'} %}
  {% for object in data %}

     {% if object[0]!=last_val.key %}
        <output whatever separation code>
        {% set test = last_val.update({'unk':object[0]}) %}

     {% endif %}
     <other stuff>
  {% endfor %}
Run Code Online (Sandbox Code Playgroud)