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'

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.