Jinja: Können wir ein {% leeres %}-Tag bekommen?

Erstellt am 2. Dez. 2011  ·  5Kommentare  ·  Quelle: pallets/jinja

Django hat dieses wirklich coole Tag namens {% empty %}, mit dem Sie Folgendes tun können:

{% for item in list %}
    <tr><td>{{ item }}</td></tr>
{% empty %}
    <tr><td>Nothing to show!</td></tr>
{% endfor %}

was kurz für ist

{% if list %}
    {% for item in list %}
        <tr><td>{{ item }}</td?</tr>
    {% endfor %}
{% else %}
    <tr><td>Nothing to show!</td></tr>
{% endif %}

Seit ich zu Jinja gewechselt bin, habe ich diesen Tag wirklich vermisst :(

Hilfreichster Kommentar

Das gibt es bereits. Verwenden Sie {% else %} in einer for-Schleife. Leider hatten wir vor Django etwas anderes leer erstellt, und es jetzt umzubenennen, um es an die Django-Semantik anzupassen, ist irgendwie seltsam.

Alle 5 Kommentare

Das gibt es bereits. Verwenden Sie {% else %} in einer for-Schleife. Leider hatten wir vor Django etwas anderes leer erstellt, und es jetzt umzubenennen, um es an die Django-Semantik anzupassen, ist irgendwie seltsam.

ach, ich verstehe. Vielleicht notieren Sie das im Abschnitt "Wechseln von anderen Template-Engines" unter dem Django-Abschnitt?

Ich sehe das nicht in der Umschaltdokumentation . Es wird in den Kontrollstrukturen erwähnt: zur Dokumentation, aber es wäre hilfreich, es in den Vermittlungsunterlagen zu haben ...

Wenn list im Code ein Generator ist und die Blöcke for und if genauso funktionieren wie in Python, dann löst das Konstrukt if-for das Problem nicht weil Generatoren immer wahr sind, und ein solches Konstrukt weniger idiomatisch ist als empty -Block.

Ich weiß nicht, ob Sie ein Flag hinzufügen können, um zu überprüfen, ob die Schleife ausgeführt wurde, ob Sie nach NameError: name 'item' is not defined suchen oder auf Jinja-Ebene eine Hilfsvariable zu list(generator) hinzufügen können. Wenn nicht, besteht die einzige Lösung darin, den empty -Block hinzuzufügen oder Python-Entwickler davon zu überzeugen, dass leere Generatoren falsch sein sollten (um hässliche Überprüfungen zu vermeiden, indem man StopIteration handhabt und das Popup-Element "zurückschiebt").

Der Block else in Jinja funktioniert bereits wie der Block empty in Django. Hier ist keine Änderung notwendig.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen