2013-04-08 189 views
13

如何连接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会),但事实证明,他们没有列出,但蟒蛇xrange对象:

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

是有没有办法让我迭代GRP1和GRP2在同一个循环中的连接?

+0

串联通过'GRP1 + GRP2'现在可用。我的jinja2版本是'v.2.9.5' – Hsiao 2017-06-13 07:46:37

回答

14

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 

按照意见,你可以明确的iterables转换成列表,并连接那些:

{% for M in GRP1|list + GRP2|list %} 
+0

感谢您的回答。问题是我没有直接在Python中使用它 - 我在一个读取文本文件并在后台执行Jinja处理的应用程序中使用它,即我实际上不能修改Python代码。 – ccbunney 2013-04-08 13:44:22

+6

@KernowBunney在这种情况下,无论是2个循环,还是查看“{%for GRP1 | list + GRP2 | list%}”是否有效...... – 2013-04-08 13:49:17

+1

Splendid!这是一种享受 - 谢谢! – ccbunney 2013-04-08 14:06:56