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

1
Эта конструкция на самом деле не применима в языках, которые интерпретируют пустую строку как ложную. True and '' or 'a'будет оценивать a, что не то, что было задумано.
Габриэль Яблонски

Но python3 интерпретирует пустую строку как False. Так что если пишешь '' or 'a'пиктон ответит 'a'. Так что ваш комментарий может быть связан с Ruby, например
user3713526
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.