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'

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' }}

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' }}

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.