Python 在JINJA2中连接列表

Python 在JINJA2中连接列表,python,jinja2,Python,Jinja2,如何连接jinja2中的两个列表变量 例如 因此,我尝试使用+(就像在Python中一样)连接这两个列表,但结果表明它们不是列表,而是Pythonxrange对象: jijna2 error: unsupported operand type(s) for +: 'xrange' and 'xrange' 我有没有办法在同一个for循环中迭代GRP1和GRP2的连接?AFAIK您不能使用原生Jinja2模板。最好创建一个新的组合iterable并将其传递给模板,例如: from itertoo

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

例如

因此,我尝试使用+(就像在Python中一样)连接这两个列表,但结果表明它们不是列表,而是Python
xrange
对象:

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

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

AFAIK您不能使用原生Jinja2模板。最好创建一个新的组合iterable并将其传递给模板,例如:

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

类似于
{{GRP1+GRP2}}
的串联列表在较低的jinja2版本v.2.9.5中可用


@萧的回答原本是作为评论

谢谢你的回答。问题是,我没有直接在Python中使用它——我在一个读取文本文件并在后台进行Jinja处理的应用程序中使用它,也就是说,我实际上无法修改Python代码。@KernowBunney在这种情况下,要么是2个循环,要么看看是否
{%M in GRP1 | list+GRP2 | list%}
works…这在Ansible中非常有用,同时为AWS VPC构建路由。我将每个路由作为一个单独的数组事实,然后使用
vpc_路由将它们全部加入一个数组:{{vpc_主路由+可选_路由1 |默认([])+可选_路由2 |默认([])}
。注意,任意一个可选路由都可能是未定义的。{GRP1 | list+GRP2 | list%}中M的%s可以工作,但如何获得唯一值?可能最容易的方法是将
set().union(var1,var2)
的结果放在模板上下文中,并使用@user2125117通过
GRP1+GRP2
连接现在可用。我的jinja2版本是
v.2.9.5
{% for M in GRP1|list + GRP2|list %}