2010-01-14 9 views
5

Il mio codice vista si presenta sostanzialmente in questo modo:Accedere agli array paralleli nei template di Django?

context = Context() 
context['some_values'] = ['a', 'b', 'c', 'd', 'e', 'f'] 
context['other_values'] = [4, 8, 15, 16, 23, 42] 

Vorrei che il mio codice di modello per assomigliare a questo:

{% for some in some_values %} 
    {% with index as forloop.counter0 %} 
    {{ some }} : {{ other_values.index }} <br/> 
    {% endwith %} 
{% endfor %} 

e mi aspetto che questo output:

a : 4 <br/> 
b : 8 <br/> 
c : 15 <br/> 
d : 16 <br/> 
e : 23 <br/> 
f : 42 <br/> 

È possibile? Sto scoprendo che la mia istruzione "with" funziona davvero, ma l'utilizzo di tale variabile come riferimento non funziona. Sospetto che per {{other_values.index}} stia facendo other_values ​​['index'] invece di other_values ​​[index]. È possibile?

+0

potrei sempre scrivere un tag modello personalizzato per questo caso d'uso, ma sembra eccessivo. Odio dover dire {{other_values ​​| access: index}}. – slacy

risposta

8

zip(some_values, other_values), quindi utilizzare in template

from itertools import izip 
some_values = ['a', 'b', 'c', 'd', 'e', 'f'] 
other_values = [4, 8, 15, 16, 23, 42] 
context['zipped_values'] = izip(some_values, other_values) 

{% for some, other in zipped_values %} 
    {{ some }}: {{ other }} <br/> 
{% endfor %} 
+1

Vorrei usare 'itertools.izip' invece. –

+0

Preferirei non dover aggiungere altro al contesto, e questo rende i dati di contesto abbastanza ridondanti. Inoltre, se cambio il mio modello (per esempio, per non accedere più a questi array paralleli), devo ricordare di pulire il codice di visualizzazione. Sembra che si trovi a cavallo della linea tra i dati e la presentazione. – slacy

+1

@slacy: la tua domanda non riguarda solo la presentazione. L'associazione tra gli elementi è essenziale in due matrici "parallele". Gli array "paralleli" sono in realtà solo 2 tuple che aspettano di essere creati. Dovresti * metterli insieme nella funzione di visualizzazione perché appartengono assolutamente insieme logicamente. Ecco perché li stai presentando insieme. –

Problemi correlati