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'

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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.