Sténographie conditionnelle Jinja2

180

Dis que j'ai ceci:

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

En PHP, disons, je peux écrire un conditionnel abrégé, comme:

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

Y a-t-il alors un moyen de traduire cela pour qu'il fonctionne dans un modèle jinja2:

'yes' if foo else 'no'
Ahmed Nuaman
la source
Je ne sais pas si cela aide, mais l'expression php ressemble beaucoup à ce que l'on appelle "l'opérateur ternaire" dans les langages de type C. La dernière ligne est appelée "expression conditionnelle" en python, bien que je l'ai vue également appelée l'opérateur ternaire en python. Quoi qu'il en soit, je le mentionne car il pourrait être utile de connaître les noms de ces choses dans une recherche Google.
mgilson

Réponses:

350

Oui, il est possible d'utiliser des expressions if en ligne :

{{ 'Update' if files else 'Continue' }}
être réel
la source
74
Un raccourci pour {{ value if value else 'No value' }}serait{{ value or 'No value' }}
Don Grem
11
@DorinGrecu Mon code n'est pas plein avec {{ tobe or 'Not to be' }}merci à vous :)
dcohenb
14
Si vous avez besoin d'utiliser une variable, vous pouvez également l'utiliser à l'intérieur {% %}. J'aime{% set your_var = 'Update' if files else 'Continue' %}
jhpg
1
@dcohenb veuillez poser une question distincte. ;)
deed02392
3

Méthode alternative (mais ce n'est pas du style python. C'est du style JS)

{{ files and 'Update' or 'Continue' }}
utilisateur3713526
la source
1
Cette construction n'est pas vraiment applicable dans les langages qui interprètent une chaîne vide comme fausse. True and '' or 'a'évaluera à a, ce qui n'est pas ce qui était prévu.
Gabriel Jablonski le
Mais python3 interprète une chaîne vide comme False. Donc, si vous écrivez, '' or 'a'python répondra 'a'. Ainsi, votre commentaire peut être lié à Ruby par exemple
user3713526