【发布时间】:2011-03-07 19:30:54
【问题描述】:
我想知道是否有可以在 Django 模板中使用的三元运算符(条件?真值:假值)。我看到有一个 python (如果条件为真值,否则为假值),但我不确定如何在 Django 模板中使用它来显示由其中一个值给出的 html。有什么想法吗?
【问题讨论】:
标签: python django templates ternary-operator
我想知道是否有可以在 Django 模板中使用的三元运算符(条件?真值:假值)。我看到有一个 python (如果条件为真值,否则为假值),但我不确定如何在 Django 模板中使用它来显示由其中一个值给出的 html。有什么想法吗?
【问题讨论】:
标签: python django templates ternary-operator
【讨论】:
{{ expr_or_value | yesno : "the string", other_variable_value }}
只是因为这里还没有提到它们:内置模板标签default 和default_if_none 在简单的情况下很有用:
默认
如果 value 的计算结果为 False,则使用给定的默认值。否则,使用该值。
例如:
{{ value|default:"nothing" }}如果值为“”(空字符串),则输出为空。
default_if_none
如果(且仅当)值为无,则使用给定的默认值。否则,使用 >value。
请注意,如果给定一个空字符串,则不会使用默认值。如果您想回退空字符串,请使用 >默认过滤器。
例如:
{{ value|default_if_none:"nothing" }}如果值为 None,则输出将是字符串“nothing”。
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default
【讨论】:
我刚刚将 Django 的三元运算符实现为标签,请参阅https://github.com/alexei/django-template-extensions 您可以将其用作:
{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}
或者:
{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}
我发现它比 yesno 过滤器更有意义,即使它真的不是 Pythonic。
【讨论】:
|yesno的问题
我想知道 python 和/或技巧是否有效?
condition and true_value or false_value
行为类似于三元运算符 - 如果条件计算结果为 True,则输出 true_value,否则输出 false_value。
【讨论】:
true_value if condition else false_value 也是有效的 Python 语法,而且它更具可读性——将检查它是否适用于模板...
你没有。 Django {% if %} 模板标签才刚刚开始支持==、and 等。{% if cond %}{% else %}{% endif %} 目前已经很紧凑了。
【讨论】:
为什么需要在模板中使用三元运算符? {% if %} 和 {% else %} 是你所需要的。
或者你可以试试firstof标签:
{% firstof var1 var2 var3 %}
它输出 var1、var2 或 var3 中的第一个,其计算结果为 True 值。
【讨论】:
{% if data_complete %}{{ data }}{% else %}{{ something_else }}{% endif %} 变成了<%= data_complete ? data : something_else %> ...第二个更加紧凑和优雅。如果 django 中有一个等价物就好了。