Django 模板三元运算符
Posted
技术标签:
【中文标题】Django 模板三元运算符【英文标题】:Django Template Ternary Operator 【发布时间】:2011-03-07 19:30:54 【问题描述】:我想知道是否有可以在 Django 模板中使用的三元运算符(条件?真值:假值)。我看到有一个 python (如果条件为真值,否则为假值),但我不确定如何在 Django 模板中使用它来显示由其中一个值给出的 html。有什么想法吗?
【问题讨论】:
【参考方案1】:您可以使用 yesno 过滤器:
value|yesno:"yeah,no,maybe"
您可以了解更多here
【讨论】:
太棒了。谢谢你的回答。我知道这存在,但不记得了。 非常好和简单,但是当我想使用一些变量时,这个过滤器似乎不适用。例如我想使用 expr_or_value | yesno : "the string", other_variable_value
这应该是选择的答案!这正是所要求的。【参考方案2】:
只是因为这里还没有提到它们:内置模板标签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
【讨论】:
另见:***.com/questions/7590198/… 太糟糕了,这对未知属性不起作用,会很好。【参考方案3】:我刚刚将 Django 的三元运算符实现为标签,请参阅https://github.com/alexei/django-template-extensions 您可以将其用作:
% ?: exp1 exp2 exp3 %
% ?: exp1 exp2 %
或者:
% iif exp1 exp2 exp3 %
% iif exp1 exp2 %
我发现它比 yesno
过滤器更有意义,即使它真的不是 Pythonic。
【讨论】:
太棒了,谢谢!解决了我无法将上下文变量传递给|yesno
的问题【参考方案4】:
我想知道 python 和/或技巧是否有效?
condition and true_value or false_value
行为类似于三元运算符 - 如果条件计算结果为 True,则输出 true_value,否则输出 false_value。
【讨论】:
我最近了解到true_value if condition else false_value
也是有效的 Python 语法,而且它更具可读性——将检查它是否适用于模板...
这是我尝试的第一件事;我很惊讶它不起作用。【参考方案5】:
你没有。 Django % if %
模板标签才刚刚开始支持==
、and
等。% if cond %% else %% endif %
目前已经很紧凑了。
【讨论】:
【参考方案6】:为什么需要在模板中使用三元运算符? % if %
和 % else %
是你所需要的。
或者你可以试试firstof
标签:
% firstof var1 var2 var3 %
它输出 var1、var2 或 var3 中的第一个,其计算结果为 True 值。
【讨论】:
我想你是对的,我只使用 if/else。我猜只是沉迷于三元。 我也希望看到三元支持。 我倾向于不同意丹尼尔的观点。我最近将一个 django 模板转换为一个简单的 javascript 模板:% if data_complete % data % else % something_else % endif %
变成了<%= data_complete ? data : something_else %>
...第二个更加紧凑和优雅。如果 django 中有一个等价物就好了。
"why would you" ...好吧,例如,在 30 秒而不是 1000 万秒内做某事。 Django 模板对开发人员不太友好,必须在视图中而不是模板中做事并不总是一件好事。以上是关于Django 模板三元运算符的主要内容,如果未能解决你的问题,请参考以下文章