2010-01-14 2 views
5

Mon code de vue ressemble fondamentalement à ceci:Accéder aux tableaux parallèles dans les modèles Django?

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

Je voudrais que mon code modèle pour ressembler à ceci:

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

Et j'attendre à ce que la sortie:

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

Est-ce possible? Je constate que mon instruction "with" fonctionne, mais l'utilisation de cette variable comme référence ne fonctionne pas. Je soupçonne que pour {{other_values.index}}, il fait d'autres valeurs ['index'] au lieu de other_values ​​[index]. Est-ce possible?

+0

Je pourrais toujours écrire une étiquette de modèle personnalisé pour ce cas d'utilisation, mais il semble exagéré. Je détesterais devoir dire {{other_values ​​| access: index}}. – slacy

Répondre

8

zip(some_values, other_values), utilisez-le dans le modèle

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

J'utiliserais 'itertools.izip' à la place. –

+0

Je préfère ne pas avoir à ajouter plus au contexte, ce qui rend les données de contexte assez redondantes. De plus, si je change mon template (par exemple, pour ne plus accéder à ces tableaux parallèles), je dois me souvenir de nettoyer le code de la vue. On dirait qu'il chevauche la ligne entre les données et la présentation. – slacy

+1

@slacy: Votre question ne concerne pas uniquement la présentation. L'association entre les éléments est essentielle dans deux tableaux "parallèles". Les tableaux "parallèles" ne sont en fait que des 2-tuples en attente de création. Vous * devriez * les mettre ensemble dans la fonction de vue parce qu'ils appartiennent absolument ensemble logiquement. C'est pourquoi vous les présentez ensemble. –

Questions connexes