如何在Django模板if语句中编写多and/or组合条件并解决解析错误
问题原因
Django模板系统的
{% if %}标签不支持使用小括号()手动调整逻辑运算的优先级,也不识别包裹表达式的多余括号,因此原代码中的括号会直接触发语法解析错误。默认状态下Django模板的逻辑运算优先级为:and优先级高于or,运算顺序从左到右执行。
解决方案
方案1:简化非空判断(推荐)
Django模板会自动识别None、空字符串、空序列等 falsy 值,判断变量是否非空无需额外写is not None和!= ''的判断,直接判断变量本身即可,你当前的场景可以直接写成:
{% if email_setting.twitter_link or email_setting.instagram_link or email_setting.fb_link %} Here my body {% endif %}
方案2:复杂逻辑拆分实现
如果遇到优先级无法满足的复杂组合逻辑,可以通过嵌套if标签或者用with标签提前存储子条件的结果来实现,需要(A or B) and (C or D)这类分组逻辑时写法参考:
{% if A or B %} {% if C or D %} 符合条件的内容 {% endif %} {% endif %}
内容的提问来源于stack exchange,提问作者Jaskaran Singh
相关产品推荐
相关产品推荐

