有没有办法迭代Jinja2中可以在一次迭代中访问第n和第(n + 1)个元素的列表?
{% for x in my_list %}
<!-- print the current and the (current+1) -->
{{x}}, {{x+1}} <-- this is wrong but hopefully highlights the problem
{% endfor %}
此外,for循环是否允许“步进”增量?
答案 0 :(得分:1)
Jinja有一个loop.index
变量,可用于访问列表中的下一个值:
@app.route('/')
def index():
return render_template_string("""
<body>
{% for x in my_list %}
<p>
{{ x }} {{ my_list[loop.index] }}<br>
</p>
{% endfor %}
</body>
""", my_list=range(10))
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9
答案 1 :(得分:0)
从Jinja v2.10开始,我们可以使用loop.nextitem
代替my_list[loop.index]
技巧。同样,loop.previtem
也可用。 :-)
从上面的超链接变更日志中:
在循环上下文中添加了
previtem
和nextitem
,从而可以访问循环中的上一个/下一个项目。如果此类项目不存在,则该值是不确定的。
答案 2 :(得分:0)
也许使用loop.nextitem的示例会有所帮助。
我正在监视的值在行列表的第一列中。
尝试这样的事情:
{% for row in mylist %}
{% if row.rowtype == "Selection" %}
{% if loop.changed(row.rowid) %}
<br/>{{ row.rowprompt }}:
<select name="{{ row.rowname }}" id="{{ row.rowname }}">
<option value="{{ row.rowvalue }}">{{ row.rowvalue }}</option>
{% set isSelectStart = 1 %}
{% else %}
<option value="{{ row.rowvalue }}">{{ row.rowvalue }}</option>
{% endif %}
{% if loop.nextitem is defined and row.rowid != loop.nextitem[0] %}
</select>
{% endif %}
{% if loop.nextitem is not defined %}
</select>
{% endif %}
{% endif %}
{% endfor %}