27

如何在 jinja2 中连接两个列表变量?

例如

GRP1 = [1, 2, 3]
GRP2 = [4, 5, 6]

{# This works fine: #}
{% for M in GRP1 %}
    Value is {{M}}
{% endfor %}


{# But this does not: #}
{% for M in GRP1 + GRP2 %}
    Value is {{M}}
{% endfor %}

因此,我尝试使用 + 连接两个列表(就像在 Python 中那样),但事实证明它们不是列表,而是 pythonxrange对象:

jijna2 error: unsupported operand type(s) for +: 'xrange' and 'xrange'

有没有办法让我在同一个 for 循环中迭代 GRP1 和 GRP2 的串联?

4

2 回答 2

21

AFAIK 你不能使用本机 Jinja2 模板来做到这一点。您最好创建一个新的组合迭代并将其传递给您的模板,例如:

from itertools import chain

x = xrange(3)
y = xrange(3, 7)
z = chain(x, y) # pass this to your template
for i in z:
    print i

根据评论,您可以将可迭代对象显式转换为列表,并将它们连接起来:

{% for M in GRP1|list + GRP2|list %}
于 2013-04-08T13:25:13.617 回答
12

{{ GRP1 + GRP2 }}在 jinja2 版本 2.9.5 及更高版本中,可以使用类似的连接列表。

@Hsiao 最初作为评论给出了这个答案

于 2020-01-23T06:17:58.963 回答