a p*_*erd 13 python templates jinja2
我有两个for循环,两者都有尊严.我想在每次内部迭代期间增加一个计数器.
例如,考虑以下模板:
from jinja2 import Template
print Template("""
{% set count = 0 -%}
{% for i in 'a', 'b', 'c' -%}
{% for j in 'x', 'y', 'z' -%}
i={{i}}, j={{j}}, count={{count}}
{% set count = count + 1 -%}
{% endfor -%}
{% endfor -%}
""").render()
Run Code Online (Sandbox Code Playgroud)
这打印不应该count=0通过count=8吗?不,它没有.
i=a, j=x, count=0
i=a, j=y, count=1
i=a, j=z, count=2
i=b, j=x, count=0
i=b, j=y, count=1
i=b, j=z, count=2
i=c, j=x, count=0
i=c, j=y, count=1
i=c, j=z, count=2
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
注意:我不能简单地保存外部loop变量来计算计数器,因为在我的软件中,内部迭代的数量是可变的.
a p*_*erd 15
使用可变的内部组大小,这将起作用:
from jinja2 import Template
items = [
['foo', 'bar'],
['bax', 'quux', 'ketchup', 'mustard'],
['bacon', 'eggs'],
]
print Template("""
{% set counter = 0 -%}
{% for group in items -%}
{% for item in group -%}
item={{ item }}, count={{ counter + loop.index0 }}
{% endfor -%}
{% set counter = counter + group|length %}
{% endfor -%}
""").render(items=items)
Run Code Online (Sandbox Code Playgroud)
...打印:
item=foo, count=0
item=bar, count=1
item=bax, count=2
item=quux, count=3
item=ketchup, count=4
item=mustard, count=5
item=bacon, count=6
item=eggs, count=7
Run Code Online (Sandbox Code Playgroud)
我想在外面超过一个范围的范围内声明的变量不能分配给什么.