2010-12-20 7 views
4

J'ai une boucle for dans mon template django qui imprime tout un tas de résultats (chaque résultat est horodaté). Je veux imprimer une donnée arbitraire (par exemple un < hr/>) une fois que l'horodatage atteint une certaine valeur mais je veux seulement l'imprimer une fois.Django "Afficher une fois" dans les modèles

{% for result in set %} 

{% if some_time > result.time %} 
<hr /> 
{% endif %} 

{{ result.info }} 

{% endfor %} 

Ceci est bien, sauf qu'il imprimera le HR pour chaque résultat pour lequel la égalise ci-dessus à true. Ce que je veux, c'est que cela ne soit imprimé que la première fois.

Quelque chose comme:

{% if some_time > result.time and bool_flag %} 

Maintenant, puisque Django ne supporte pas les variables assignant dans ses modèles, je suis un peu d'une perte pour ce qu'il faut faire. Je peux penser à quelques façons de le faire (en utilisant une classe/fonction accessible par template qui change le drapeau, ou en faisant plus de traitement dans la vue, mais je crains que cela augmente le nombre d'appels et d'itérations sur les données) , mais je me demande s'il y a une façon simple de "djangoey" de le faire.

Merci =)

Répondre

4

Vous pouvez utiliser builtin balise template ifchanged:

{% ifchanged %} 
    {% if some_time > result.time %} 
     <hr /> 
    {% endif %} 
{% endifchanged %} 
+0

Fantastique! Pas exactement ce que j'étais après, mais fait ce dont j'ai besoin parfaitement (un coût légèrement plus élevé que ce que j'attendais à cause du stockage de la chaîne, mais assez bon). Merci =) – Tyris

Questions connexes