Django模板三元运算符

Ano*_*non 53 python django templates ternary-operator

我想知道是否有一个可以在Django模板中使用的三元运算符(条件?true-value:false-value).我看到有一个python(真值,如果条件其他假值)但我不确定如何在Django模板中使用它来显示由其中一个值给出的html.有任何想法吗?

小智 82

您可以使用yesno过滤器:

{{ value|yesno:"yeah,no,maybe" }}
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#yesno

  • 非常好,简单,但是当我想使用一些变量时,似乎这个过滤器不适用.例如,我想使用`{{expr_or_value | yesno:"the string",other_variable_value}}` (10认同)
  • 这应该是选定的答案!这正是所要问的。 (2认同)

Dan*_*man 32

为什么在模板中需要三元运算符?{% if %}而且{% else %}就是你所需要的.

或者您可以尝试firstof标记:

{% firstof var1 var2 var3 %}
Run Code Online (Sandbox Code Playgroud)

它输出var1,var2或var3中的第一个,其值为True值.

  • 我倾向于不同意丹尼尔.我最近将django模板转换为一个简单的javascript模板:`{%if data_complete%} {{data}} {%else%} {{something_else}} {%endif%}`变为`<%= data_complete?data:something_else%>`...第二个更加紧凑和优雅.如果在django中有一个等价物,那就太好了. (41认同)
  • 我也希望看到三元支持. (8认同)
  • "你为什么会这样"......好吧,例如,在30秒内做一些事情,而不是10分钟.Django模板不是那么开发人员友好,在视图而不是模板中做东西并不总是一件好事. (8认同)

pti*_*tim 18

仅仅因为它们还没有被提及:内置的模板标签default,default_if_none在简单的情况下可能很有用:

默认

如果value的计算结果为False,则使用给定的默认值.否则,使用该值.

例如:

{{ value|default:"nothing" }}

如果value为""(空字符串),则输出将为空.

default_if_none

如果(且仅当)值为None,则使用给定的默认值.否则,使用>值.

请注意,如果给出空字符串,则不会使用默认值.如果要为空字符串回退,请使用>默认过滤器.

例如:

{{ value|default_if_none:"nothing" }}

如果value为None,则输出将为字符串"nothing".

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default

  • 太糟糕了,这不适用于未知属性,本来就很好。 (2认同)

Ale*_*xei 5

我刚刚为Django实现了三元运算符作为标记,请参阅https://github.com/alexei/django-template-extensions 您可以将其用作:

{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}
Run Code Online (Sandbox Code Playgroud)

要么:

{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}
Run Code Online (Sandbox Code Playgroud)

我发现它比yesno滤镜更有意义,即使它真的不是Pythonic.