Jinja2 简写条件语句

275

假设我有这个:

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

在 PHP 中,我可以编写简短条件语句,例如:
<?php echo $foo ? 'yes' : 'no'; ?>

那么,我是否能够将此翻译为适用于jinja2模板的方式:

'yes' if foo else 'no'

5
不知道这是否有帮助,但是php表达式看起来很像C语言系列中所称的“三元运算符”。在Python中,最后一行被称为“条件表达式”,尽管我也见过人们在Python中称之为三元运算符。无论如何,我提到这点是因为在谷歌搜索时知道这些东西的名称可能会有所帮助。 - mgilson
2个回答

544

97
{{ value if value else 'No value' }} 的简写形式是 {{ value or 'No value' }} - Don Grem
16
谢谢你,我的代码没有充斥着 {{ tobe or 'Not to be' }} 了。 - dcohenb
22
如果你需要使用一个变量,你也可以在 {% %} 内部使用。 比如:{% set your_var = 'Update' if files else 'Continue' %} - jhpg
它是否可以包含标记,例如:{{ '<h4>更新</h4>' if files else '<h4>继续</h4>' }}? - Macilias
1
@Macilias 这取决于 autoescape 的配置方式。如果设置为 True,则可能需要添加 | safe 过滤器。 - bereal
在以下情况下该怎么做 {{ "Whoops" if message.tags == 'danger' else message.tags }} - TarangP

10

另一种方法(但这不是 Python 风格,而是 JS 风格)

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

3
这种结构在将空字符串解释为假的语言中并不适用。True and '' or 'a' 将被计算为 a,这不是预期的结果。 - Gabriel Jablonski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接