2013-04-08 13 views
13

Jak mogę połączyć dwie zmienne listy w jinja2?Łączone listy w 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 %} 

Więc starałem się złączyć dwie listy używając + (jak byś w Pythonie), ale okazuje się, że nie są oni list, ale pyton xrange obiekty:

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

Czy jest sposób dla mnie do iteracji nad konkatenacją GRP1 i GRP2 w tej samej pętli for?

+0

złączenie przez 'GRP1 + GRP2' jest już dostępny. Moja wersja jinja2 to 'v.2.9.5' – Hsiao

Odpowiedz

14

AFAIK nie można tego zrobić za pomocą natywnej matrycy Jinja2. Lepiej tworząc nowy połączony iterable i przechodzącej które do szablonu, np:

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 

Zgodnie komentarzach, można jawnie przekonwertować iterables w listach i złączyć te:

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

Dziękuję za odpowiedź. Problem polega na tym, że nie używam go bezpośrednio w Pythonie - używam go w aplikacji, która czyta w pliku tekstowym i przetwarza Jinja za kulisami, tj. Nie mogę faktycznie zmodyfikować kodu Pythona. – ccbunney

+6

@KernowBunney W takim przypadku albo 2 pętle - albo zobacz, czy '{% dla M na liście GRP1 | + GRP2 | lista%}' działa ... –

+1

Splendid! To działa na nagrodę - dzięki! – ccbunney