连接JINJA2中的列表

时间:2013-04-08 13:11:50

标签: python jinja2

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

E.G。

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中一样),但事实证明它们不是列表,而是python xrange对象:

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

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

2 个答案:

答案 0 :(得分:17)

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 %}

答案 1 :(得分:4)

类似{{ GRP1 + GRP2 }}的连接列表可用,但版本低于jinja2 v.2.9.5。

@Hsiao最初以评论的形式给出了这个答案