【问题标题】:Grouping Conditions in Django template if statementDjango模板if语句中的分组条件
【发布时间】: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。 (注意:我还没有测试过。)

标签: django django-templates


【解决方案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 感谢您的注意!请考虑提交对答案的编辑请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2013-10-17
    • 1970-01-01
    • 2013-04-23
    • 2012-09-14
    • 2015-05-14
    • 2020-07-23
    相关资源
    最近更新 更多