web-dev-qa-db-fra.com

comment exécuter ce code dans le modèle Django 

c'est mon code:

{% for i,j in enumerate(a) %}
    {{i}} ,{{j}}
{% endfor%}

mais, cela montre une erreur, je pense qu'il ne peut pas exécuter la méthode enumerate,

alors comment exécuter le modèle enumerate dans Django,

merci

44
zjm1126

Le sous-système de modèle a des constructions spéciales intégrées dans le bloc for/endfor qui vous permet d'accéder à l'index actuel de la boucle sans avoir à appeler enumerate.

{% for j in a %}
    {{ forloop.counter0 }}, {{ j }}
{% endfor %}

Bien que cet extrait résolve votre problème immédiat, si vous vous attendez à avoir accès aux fonctions intégrées Python et aux autres constructions Python dans vos modèles Django, vous risquez de mal comprendre le bac à sable qu'il fournit/applique. 

63
Joe Holloway

vous pouvez utiliser {{ forloop.counter }} ou {{ forloop.counter0 }} pour le même effet, ce dernier est indexé sur 0, donc plus proche de enumerate.

12
Uku Loskit

Le modèle Django constitue la couche de présentation et n'est pas destiné à la logique. De la docs

Si vous avez des connaissances en programmation ou si vous êtes habitué à des langages mélangeant directement du code de programmation en HTML, gardez à l’esprit que le système de gabarits Django n’est pas simplement intégré dans HTML. Ceci est inhérent à la conception: le système de gabarit est conçu pour exprimer une présentation et non une logique de programme.

Maintenant, pour obtenir les mêmes fonctionnalités dans Django, vous devrez compléter votre logique dans les vues.

views.py

def my_view(request, ...):
    ....
    enumerated_a = enumerate(a);
    ....
    return render_to_response('my_template.html', {'enumerated_a ': enumerated_a }..)

Maintenant, la fonction enumerate renvoie un objet énuméré qui est itératif.
my_template.html

{% for index, item in enumerated_a %}
    {{ index }},{{ item }}
{% endfor %}

Bien que je pense que vous pouvez probablement le changer en une liste énumérée et l'utiliser aussi.

5
vabhdman
{% for item in a %}
    {{ forloop.counter }}, {{ item }}
{% endfor %}

Lien associé

2
razpeitia

Si toutefois vous devez utiliser une fonction dans un modèle, je vous suggère plutôt de créer un filtre ou une balise. Pour référence, consultez http://docs.djangoproject.com/fr/1.2/howto/custom-template-tags/

0
gladysbixly