Jinja2 условное обозначение

180

Скажи, что у меня есть это:

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

В PHP, скажем, я могу написать условное сокращение, например:

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

Есть ли способ перевести это для работы в шаблоне jinja2:

'yes' if foo else 'no'
Ахмед Нуаман
источник
Я не знаю, помогает ли это, но выражение php очень похоже на то, что называется "троичным оператором" в C-подобных языках. Последняя строка называется «условным выражением» в python, хотя я видел, что она также называется тернарным оператором в python. Во всяком случае, я упоминаю об этом, поскольку это может помочь узнать названия этих вещей в поиске Google.
Мгилсон

Ответы:

351

Да, можно использовать встроенные if-выражения :

{{ 'Update' if files else 'Continue' }}
будь реальным
источник
74
Сокращение {{ value if value else 'No value' }}было бы{{ value or 'No value' }}
Дон Грем
11
@DorinGrecu Мой код не полон {{ tobe or 'Not to be' }}благодаря вам :)
dcohenb
14
Если вам нужно использовать переменную, вы можете использовать и внутри {% %}. Нравится{% set your_var = 'Update' if files else 'Continue' %}
jhpg
1
@dcohenb, пожалуйста, задайте отдельный вопрос. ;)
deed02392
3

Альтернативный способ (но это не стиль Python. Это стиль JS)

{{ files and 'Update' or 'Continue' }}
user3713526
источник
1
Эта конструкция на самом деле не применима в языках, которые интерпретируют пустую строку как ложную. True and '' or 'a'будет оценивать a, что не то, что было задумано.
Габриэль Яблонски
Но python3 интерпретирует пустую строку как False. Так что если пишешь '' or 'a'пиктон ответит 'a'. Так что ваш комментарий может быть связан с Ruby, например
user3713526