Jinja2 skrócona warunkowa

180

Powiedz, że mam to:

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

W PHP, powiedzmy, mogę napisać warunkową skróconą formę, na przykład:

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

Czy w takim razie mogę przetłumaczyć to na szablon jinja2:

'yes' if foo else 'no'
Ahmed Nuaman
źródło
Nie wiem, czy to pomaga, ale wyrażenie php wygląda bardzo podobnie do tak zwanego „operatora trójskładnikowego” w językach podobnych do języka C. Ostatnia linia nazywa się w Pythonie "wyrażeniem warunkowym", chociaż widziałem, że w Pythonie nazywa się to również operatorem trójskładnikowym. W każdym razie wspominam o tym, ponieważ może pomóc poznanie nazw tych rzeczy w wyszukiwarce Google.
mgilson

Odpowiedzi:

350

Tak, można używać wbudowanych wyrażeń if :

{{ 'Update' if files else 'Continue' }}
być prawdziwym
źródło
74
Skrótowe określenie {{ value if value else 'No value' }}byłoby{{ value or 'No value' }}
Don Grem
11
@DorinGrecu Mój kod nie jest pełen {{ tobe or 'Not to be' }}podziękowań :)
dcohenb
14
Jeśli potrzebujesz zmiennej, możesz użyć jej {% %}również wewnątrz . Like{% set your_var = 'Update' if files else 'Continue' %}
jhpg
1
@dcohenb proszę zadać jako osobne pytanie. ;)
deed02392
3

Alternatywny sposób (ale to nie jest styl Pythona. To styl JS)

{{ files and 'Update' or 'Continue' }}
user3713526
źródło
1
Ta konstrukcja nie ma zastosowania w językach, które interpretują pusty łańcuch jako fałsz. True and '' or 'a'oceni do a, co nie było zamierzone.
Gabriel Jablonski
Ale python3 interpretuje pusty ciąg jako False. Więc jeśli napiszesz, '' or 'a'python odpowie 'a'. Więc twój komentarz może odnosić się na przykład do Rubiego
user3713526