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.