Jinja2 taquigrafía condicional

180

Digamos que tengo esto:

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

En PHP, por ejemplo, puedo escribir un condicional abreviado, como:

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

¿Hay alguna manera de traducir esto para que funcione en una plantilla jinja2:

'yes' if foo else 'no'
Ahmed Nuaman
fuente
No sé si esto ayuda, pero la expresión php se parece mucho a lo que se llama el "operador ternario" en lenguajes tipo C. La línea final se llama "expresión condicional" en python, aunque también la he visto llamar al operador ternario en python. De todos modos, lo menciono, ya que podría ayudar a saber los nombres de esas cosas en una búsqueda en Google.
mgilson

Respuestas:

350

Sí, es posible usar expresiones if en línea :

{{ 'Update' if files else 'Continue' }}
se real
fuente
74
Una abreviatura para {{ value if value else 'No value' }}sería{{ value or 'No value' }}
Don Grem
11
@DorinGrecu Mi código no está lleno {{ tobe or 'Not to be' }}gracias a usted :)
dcohenb
14
Si necesita usar una variable, también puede usar dentro {% %}. Me gusta{% set your_var = 'Update' if files else 'Continue' %}
jhpg
1
@dcohenb por favor haga una pregunta por separado. ;)
escritura 02392
3

Forma alternativa (pero no es estilo python. Es estilo JS)

{{ files and 'Update' or 'Continue' }}
usuario3713526
fuente
1
Esta construcción no es realmente aplicable en lenguajes que interpretan una cadena vacía como falsa. True and '' or 'a'evaluará a a, que no es lo que se pretendía.
Gabriel Jablonski
Pero python3 interpreta una cadena vacía como False. Entonces, si escribes, '' or 'a'Python responderá 'a'. Entonces, su comentario puede estar relacionado con Ruby, por ejemplo
user3713526