Django a cette balise vraiment cool appelée {% empty %}, qui vous permet de faire ceci :
{% for item in list %}
<tr><td>{{ item }}</td></tr>
{% empty %}
<tr><td>Nothing to show!</td></tr>
{% endfor %}
qui est l'abréviation de
{% if list %}
{% for item in list %}
<tr><td>{{ item }}</td?</tr>
{% endfor %}
{% else %}
<tr><td>Nothing to show!</td></tr>
{% endif %}
Depuis que je suis passé à jinja, j'ai vraiment raté cette balise :(
Cela existe déjà. Utilisez {% else %}
sur une boucle for. Malheureusement, nous avions autre chose avant que Django ne crée vide et le renommer maintenant pour correspondre à la sémantique de Django est un peu bizarre.
Oh je vois. Peut-être mettre une note à ce sujet dans la section "Commutation à partir d'autres moteurs de modèles" sous la section django ?
Je ne vois pas cela dans la documentation de commutation . Il est mentionné dans les structures de contrôle : pour la documentation mais il serait utile de l'avoir dans la doc de commutation...
Si list
dans le code est un générateur et que les blocs for
et if
fonctionnent de la même manière qu'en Python, alors la construction if-for
ne résout pas le problème parce que les générateurs sont toujours véridiques, plus une telle construction est moins idiomatique que le bloc empty
.
Je ne sais pas si vous pouvez ajouter un indicateur pour vérifier si la boucle a été exécutée, vérifier NameError: name 'item' is not defined
ou ajouter une variable d'assistance à list(generator)
au niveau Jinja. Si ce n'est pas le cas, la seule solution consiste à ajouter le bloc empty
ou à convaincre les développeurs Python que les générateurs vides doivent être faux (pour éviter une vérification laide en manipulant StopIteration
et en "repoussant" l'élément sauté).
Le bloc else
dans Jinja fonctionne déjà comme le bloc empty
dans Django. Aucun changement n'est nécessaire ici.
Commentaire le plus utile
Cela existe déjà. Utilisez
{% else %}
sur une boucle for. Malheureusement, nous avions autre chose avant que Django ne crée vide et le renommer maintenant pour correspondre à la sémantique de Django est un peu bizarre.