如何使用Django模板标签检查对象布尔字段是否为True?
Django模板中检查布尔字段的正确姿势
哈哈,我太懂这种踩模板语法坑的感觉了!你这两个写法的问题我给你拆解下:
为什么你的写法不对?
第一种写法
{% if {{ obj.bool }} == True %} HELLO {% endif %}:
Django模板标签({% ... %})内部不需要再嵌套变量插值的{{ ... }},模板解析器会直接识别标签里的变量名,你加了{{就会触发语法错误,这是典型的混淆了模板标签和变量插值的语法。第二种写法
{% if '{{ obj.bool }}' == 'True' %} <p>HELLO</p> {% endif %}:
你把{{ obj.bool }}用单引号括起来后,它就变成了一个固定的字符串'{{ obj.bool }}',而不是变量的实际值,所以和字符串'True'比较自然不相等,也就不会输出内容啦。
正确的写法有这些:
最简洁的方式(推荐):
因为布尔值本身就可以直接作为if的判断条件,直接写:{% if obj.bool %} <p>HELLO</p> {% endif %}当
obj.bool为True时就会显示HELLO,非常直观。显式比较布尔值:
如果想要更明确地写出比较逻辑,直接在模板标签里使用变量名和True比较,不要加{{ }}:{% if obj.bool == True %} <p>HELLO</p> {% endif %}使用
is判断(更严谨):
对于布尔值这种单例对象,用is判断身份会更准确,写法是:{% if obj.bool is True %} <p>HELLO</p> {% endif %}
内容的提问来源于stack exchange,提问作者Ruth Young
相关产品推荐
相关产品推荐

