Jinja: Pouvons-nous obtenir une balise {% empty %} ?

Créé le 2 déc. 2011  ·  5Commentaires  ·  Source: pallets/jinja

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 :(

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.

Tous les 5 commentaires

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.

Cette page vous a été utile?
0 / 5 - 0 notes