Django模板if语句中的分组条件

Posted

技术标签:

【中文标题】Django模板if语句中的分组条件【英文标题】:Grouping Conditions in Django template if statement 【发布时间】:2014-07-01 12:23:42 【问题描述】:

我想在 django 模板的 if 语句中否定一组条件分隔 ors 的结果。 这是我的代码

% if not (owner.home_number or owner.work_number or owner.mobile_number) %
    No contact number available
% endif %

我目前收到此错误

TemplateSyntaxError:无法解析剩余部分: '(owner.home_number' 来自 '(owner.home_number'

【问题讨论】:

您是否忘记添加一些结束引号? (参考this answer) 我不这么认为......当我取出括号时,我没有收到语法错误。 根据Django documentation,“is not True”可以附加到 if 语句后,即if owner.home_number or owner.work_number or owner.mobile_number is not True。 (注意:我还没有测试过。) 【参考方案1】:

( 此处的语法无效。

如果你想转换:if is_admin and (requested or exempted)

你可以使用类似的东西:

% if is_admin and requested or is_admin and exempted %

【讨论】:

【参考方案2】:

由于order of evaluation 如下:

或 和 不是

你可以省略括号:

% if not owner.home_number or owner.work_number or owner.mobile_number %
    No contact number available
% endif %

或者,仅供参考,您也可以撤销支票:

% if owner.home_number or owner.work_number or owner.mobile_number %
% else %
    No contact number available
% endif %

【讨论】:

我最终这样做了,但我想知道为什么括号在 django 模板中不起作用... @Crystal 不能使用括号,by design 是不允许的。如果您认为值得,请考虑接受答案。谢谢。 根据链接:“运算符的优先级是from lowest to highest 这个答案不正确。请参阅@S_M 的评论。换句话说,表达式not owner.home_number or owner.work_number or owner.mobile_number 将被解释为(not owner.home_number) or owner.work_number or owner.mobile_number,这不是 OP 想要的。 @typeracer 感谢您的注意!请考虑提交对答案的编辑请求。

以上是关于Django模板if语句中的分组条件的主要内容,如果未能解决你的问题,请参考以下文章

django 模板 if 或语句

django模板中的if语句不正确

我的 Django 模板中的“Else if”语句出现在 HTML 标头块之后

如果评估的变量为 False,为啥我的 django 模板中的这个 IF 语句会执行?

Django 模板中的错误:我可以在 if 语句中进行算术运算吗

如何在 django 模板的 forloop 中访问 If 语句中的元组值?