2009-04-05 11 views
13

Permettez-moi préface de Je commence Python donc si cela est vraiment une question simple^_^Django modèle - Nouvelle déclaration des variables

J'ai un fichier html avec le contenu suivant:

 {%for d in results%} 
     <div class="twt"> 
      <img src="{{ d.profile_image_url }}" width="48px" height="48px" /> <span> {{ d.text }} </span> 
      <span class="date">{{ d.created_at }}</span> 
     </div> 
    {% endfor %} 

ce qui fonctionne bien mais je voudrais aussi déclarer une variable sur cette page. Disons que pour cet exemple, nous pouvons le RowNumber qui sera incrémenté pour chaque d affiché, crachant le RowNumber actuel.

J'ai essayé de faire:

{{ RowNumber = 0}} 
{{ RowNumber ++ }} 

Mais il ne semble pas me permettre de déclarer RowNumber.

+0

titre doit être 'Django template' à la place. – muhuk

Répondre

20

Vérifiez la documentation sur la boucle for.

Il crée automatiquement une variable appelée forloop.counter qui contient l'index d'itération en cours.

En ce qui concerne la question plus générale sur la façon de déclarer des variables, il n'y a pas de façon originale de le faire avec Django, et ce n'est pas une fonctionnalité manquante, mais une fonctionnalité. Si vous voulez vraiment faire cela, il est possible avec custom tags mais pour la plupart la philosophie que vous voulez suivre est que la plupart du temps tout ce que vous voulez faire cela devrait être fait dans la vue et le modèle devrait être réservé pour très simple logique. Par exemple, pour résumer un total, vous pouvez utiliser le filtre add. De même, vous pouvez create your own filters comme avec des balises.

+1

Merci, et si j'avais vraiment besoin d'une nouvelle variable? par exemple, additionner les totaux de certains paramètres ... – TimLeung

+0

Ensuite, vous devrez utiliser une balise ou un filtre personnalisé - le langage de template de Django ne vous permet simplement pas de déclarer de nouvelles variables. – mipadi

+0

Le langage de template de Django a été conçu pour éviter le style de codage "in-template" de PHP, ASP, JSP, etc, donc ce genre de déclaration, comme l'ont dit Paolo et mipadi, est délibérément absent. L'esprit des modèles est que toute logique de traitement, comme l'ajout, doit être effectuée dans la fonction de vue. –

7

Si vous souhaitez définir une variable dans un modèle Django, vous pouvez utiliser this small template tag I've written.

+0

Essayé ceci et obtenu: TemplateSyntaxError: 'set_var' n'est pas une bibliothèque de balises valide: Bibliothèque de modèles set_var non trouvé, essayé google.appengine._internal.django.templatetags.set_var. – slashdottir

+0

semble que vous avez oublié d'ajouter votre application Django dans "INSTALLED_APPS" dans settings.py –

2

dans le modèle:

{% for outer_obj in outer_list %} 
    {% for inner_obj in inner_list %} 
     {% increment_counter forloop.counter0 forloop.parentloop.counter0 outer_list.count %} 
    {% endfor %} 
{% endfor %} 

Templatetag:

@register.simple_tag 
def increment_counter(outer, inner, outer_loop_length): 
    return outer + inner * outer_loop_length + inner * (outer_loop_length - 1) 

Résultat: 0 1 2 3 ...

Questions connexes