Jinja2 Kurzschrift bedingt

178

Sagen Sie, ich habe das:

{% if files %}
    Update
{% else %}
    Continue
{% endif %}

In PHP kann ich beispielsweise eine Kurzbedingung schreiben, wie:

<?php echo $foo ? 'yes' : 'no'; ?>

Gibt es dann eine Möglichkeit, dies in eine jinja2-Vorlage zu übersetzen:

'yes' if foo else 'no'
Ahmed Nuaman
quelle
Ich weiß nicht, ob dies hilft, aber der PHP-Ausdruck ähnelt stark dem, was in C-ähnlichen Sprachen als "ternärer Operator" bezeichnet wird. Die letzte Zeile wird in Python als "bedingter Ausdruck" bezeichnet, obwohl ich gesehen habe, dass sie auch in Python als ternärer Operator bezeichnet wird. Wie auch immer, ich erwähne es, da es hilfreich sein könnte, die Namen dieser Dinge in einer Google-Suche zu kennen.
mgilson

Antworten:

347

Ja, es ist möglich, Inline-If-Ausdrücke zu verwenden :

{{ 'Update' if files else 'Continue' }}
sei ehrlich
quelle
73
Eine Abkürzung für {{ value if value else 'No value' }}wäre{{ value or 'No value' }}
Don Grem
10
@ DorinGrecu Mein Code ist nicht voll mit {{ tobe or 'Not to be' }}dank dir :)
dcohenb
12
Wenn Sie eine Variable verwenden müssen, können Sie auch inside verwenden {% %}. Gefällt {% set your_var = 'Update' if files else 'Continue' %}
mir
1
@dcohenb bitte als separate Frage stellen. ;)
deed02392
3

Alternativer Weg (aber es ist kein Python-Stil. Es ist ein JS-Stil)

{{ files and 'Update' or 'Continue' }}
user3713526
quelle
1
Dieses Konstrukt ist in Sprachen, die eine leere Zeichenfolge als falsch interpretieren, nicht wirklich anwendbar. True and '' or 'a'wird bewerten a, was nicht beabsichtigt war.
Gabriel Jablonski
Aber Python3 interpretiert leere Zeichenfolgen als False. Also, wenn Sie '' or 'a'Python schreiben, wird antworten 'a'. So kann Ihr Kommentar beispielsweise mit Ruby in Verbindung gebracht werden
user3713526