Récursivité au sein d'un template django

Publié le 11 juillet 2011 par Samuel Martin

Pas de nouveauté fracassante, juste l'exemple d'une syntaxe simple et dépouillée présentant la récursivité du côté des templates. L'exemple présente l'affichage d'une liste de commentaires en cascade. Cf Screenshot. (Valide Django 1.2)

Template parent

Il suffit simplement de déporter l'affichage des commentaires du côté d'un fichier à inclure. Ici on appelle le fichier _comments.html.

Dans comments_list.html

{% include "checklists/workshops/_comments.html" %}

Template enfant

Toute la magie se trouve dans le template à inclure. Ici on appelle continuellement _comments tant qu'il y a des enfants (childrens).

Dans _comments.html

{% if comments %}

{% for comment in comments %}	
	{{ comment.creator.get_full_name }}	
	{{ comment.description }}

	{% with "_comments.html" as filename %}
		{% with comment.get_childrens as comments %}
			{% include filename %}
		{% endwith %}
	{% endwith %}

{% endfor %}

{% endif %}

Liste de commentaires + html + css