Stenografia Jinja2 condizionale


180

Di 'che ho questo:

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

In PHP, diciamo, posso scrivere una condizione abbreviata, come:

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

C'è quindi un modo in cui posso tradurre questo per funzionare in un modello jinja2:

'yes' if foo else 'no'

Non so se questo aiuta, ma l'espressione php assomiglia molto a quello che viene chiamato "operatore ternario" in linguaggi simili a C. L'ultima riga è chiamata "espressione condizionale" in Python, anche se l'ho vista chiamata anche operatore ternario in Python. Ad ogni modo, lo menziono perché potrebbe aiutare a conoscere i nomi di quelle cose in una ricerca su Google.
mgilson

Risposte:


351

Sì, è possibile utilizzare if-espressioni in linea :

{{ 'Update' if files else 'Continue' }}

74
Una scorciatoia {{ value if value else 'No value' }}sarebbe{{ value or 'No value' }}
Don Grem, il

11
@DorinGrecu Il mio codice non è pieno {{ tobe or 'Not to be' }}grazie a te :)
dcohenb

14
Se è necessario utilizzare una variabile, è possibile utilizzare {% %}anche all'interno . Mi piace{% set your_var = 'Update' if files else 'Continue' %}
jhpg

1
@dcohenb, fai una domanda separata. ;)
deed02392 del

3

Modo alternativo (ma non è in stile pitone. È in stile JS)

{{ files and 'Update' or 'Continue' }}

1
Questo costrutto non è realmente applicabile nei linguaggi che interpretano una stringa vuota come falsa. True and '' or 'a'valuterà a, che non è quello che era previsto.
Gabriel Jablonski l'

Ma python3 interpreta la stringa vuota come False. Quindi se scrivi '' or 'a'Python risponderà 'a'. Quindi il tuo commento può essere correlato a Ruby per esempio
user3713526
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.