2013-04-08 2 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' 

Is есть способ для меня перебрать конкатенацию GRP1 и GRP2 в том же для цикла?

+0

конкатенации через «GRP1 + GRP2». Моя версия jinja2 - 'v.2.9.5' – Hsiao

ответ

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 

Согласно комментариям, вы можете явно преобразовать итерируемых в списки, и сцепить эти:

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

Спасибо за ответ. Проблема в том, что я не использую его непосредственно в Python - я использую его в приложении, которое читает в текстовом файле и обрабатывает Jinja за кулисами, т. Е. Я не могу изменить код Python. – ccbunney

+6

@KernowBunney В этом случае либо 2 цикла, либо см., Если '{% for M в GRP1 | list + GRP2 | list%}' работает ... –

+1

Splendid! Это работает - спасибо! – ccbunney

Смежные вопросы