2013-04-08 17 views
13

Come concatenare due variabili di lista in jinja2?Elenchi concatenati in 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 %} 

Così, ho cercato di concatenare i due elenchi utilizzando + (come si farebbe in Python), ma si scopre che non sono liste, ma pitone xrange oggetti:

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

E` c'è un modo per me di ripetere la concatenazione di GRP1 e GRP2 nello stesso ciclo?

+0

Concatenazione tramite 'GRP1 + GRP2' è ora disponibile. La mia versione jinja2 è 'v.2.9.5' – Hsiao

risposta

14

AFAIK non è possibile farlo utilizzando il templating nativo di Jinja2. È meglio creare un nuovo combinato iterabile e passaggio che per il modello, ad esempio:

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 

Come per i commenti, è possibile convertire in modo esplicito le iterables in liste e concatenare quelli:

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

Grazie per la risposta. Il problema è che non lo sto usando direttamente in Python - lo sto usando in un'applicazione che legge in un file di testo e fa l'elaborazione di Jinja dietro le quinte, cioè non posso realmente modificare il codice Python. – ccbunney

+6

@KernowBunney In questo caso, o 2 loop - o vedi se '{% per M in GRP1 | list + GRP2 | list%}' funziona ... –

+1

Splendid! Funziona bene - grazie! – ccbunney