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.