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】:

只是因为这里还没有提到它们:内置模板标签defaultdefault_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 模板三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2+模板中值的三元运算符

如何在带有过滤器的Vue模板中使用三元运算符?

javascript ES6 - 带三元运算符的模板字符串

角度三元运算符

在 AngularJS 的三元运算符中使用过滤器

thinkphp 三元运算