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'

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.