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 模板中的“Else if”语句出现在 HTML 标头块之后
如果评估的变量为 False,为啥我的 django 模板中的这个 IF 语句会执行?