python tutorial français - En parcourant deux listes dans les modèles Django





3 Answers

Vous pouvez utiliser zip dans votre vue:

mylist = zip(list1, list2)
return render_to_response('template.html', {'list': list, ... })

et dans votre modèle utiliser

{% for item1, item2 in mylist %}

pour parcourir les deux listes.

Cela devrait fonctionner avec toutes les versions de Django.

apprendre la programmation

Je veux faire l'itération de la liste ci-dessous dans les modèles de django:

foo = ['foo', 'bar'];
moo = ['moo', 'loo'];

for (a, b) in zip(foo, moo):
    print a, b

code django:

{%for a, b in zip(foo, moo)%}
  {{a}}
  {{b}}
{%endfor%}

J'obtiens l'erreur ci-dessous lorsque j'essaie ceci:

File "/base/python_lib/versions/third_party/django-0.96/django/template/defaulttags.py", line 538, in do_for
    raise TemplateSyntaxError, "'for' statements should have either four or five words: %s" % token.contents

Comment puis-je accomplir cela?




J'ai construit django-multiforloop pour résoudre ce problème. Du README:

Avec django-multiforloop installé, le rendu de ce modèle

{% for x in x_list; y in y_list %}
  {{ x }}:{{ y }}
{% endfor %}

avec ce contexte

context = {
    "x_list": ('one', 1, 'carrot'),
    "y_list": ('two', 2, 'orange')
}

va sortir

one:two
1:2
carrot:orange



Vous pouvez définir les propriétés des objets foo des objets moo du côté serveur.

for f, b in zip(foo, bar):
    f.foosBar = b

context = {
    "foo": foo
}

Ceci est particulièrement propre lorsque la seconde liste est la propriété du premier (ce qui est généralement le cas).

users = User.objects.all()
for user in users:
    user.bestFriend = findBestFriendForUser(user)

context = {
    "users": users
}



Related