Скорочення Jinja2 умовно


180

Скажіть, у мене це:

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

У PHP, скажімо, я можу записати стенограму умовно, наприклад:

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

Чи є тоді спосіб перекласти це для роботи в шаблоні jinja2:

'yes' if foo else 'no'

Я не знаю, чи це допомагає, але вираз php дуже схожий на те, що в С-подібних мовах називається "потрійним оператором". Заключний рядок у python називається "умовним виразом", хоча я бачив, що він називається потрійним оператором і в python. У всякому разі, я згадую це, оскільки це може допомогти дізнатися назви цих речей у пошуку Google.
mgilson

Відповіді:


350

Так, можна використовувати вбудовані if-вирази :

{{ 'Update' if files else 'Continue' }}

74
Скорочення для {{ value if value else 'No value' }}б{{ value or 'No value' }}
Дон Grem

11
@DorinGrecu Мій код не повний {{ tobe or 'Not to be' }}завдяки вам :)
dcohenb

14
Якщо вам потрібно використовувати змінну, ви можете використовувати і всередині {% %}. Як{% set your_var = 'Update' if files else 'Continue' %}
jhpg

1
@dcohenb, будь ласка, задайте його як окреме запитання. ;)
de020239

3

Альтернативний спосіб (але це не стиль пітона. Це стиль JS)

{{ files and 'Update' or 'Continue' }}

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

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