
在django html模板中使用`{% if %}`判断模型布尔字段时,应直接写`{% if feature.is_true %}`,而非`{% if feature.is_true == true %}`——后者会因`true`被误解析为未定义变量而导致条件始终不成立。
Django模板语言(DTL)与Python语法有重要区别:模板中没有内置的True、False或None字面量。当你在模板里写下{% if feature.is_true == True %}时,Django会将True视为一个待解析的变量名,而非布尔常量。由于该变量未在上下文中定义,其值为None,因此整个表达式等价于feature.is_true == None,自然无法按预期生效。
✅ 正确写法(简洁且符合DTL规范):
{% if feature.is_true %}
Yes, this is True
{% endif %}✅ 若需显式判断False,可使用{% if not feature.is_true %}或{% else %}:
{% if feature.is_true %}
Status: Enabled
{% else %}
Status: Disabled
{% endif %}⚠️ 注意事项:
- 不要使用 == True、is True、== False 等Python风格比较;
- Django模板会自动对变量进行“真值测试”(truthiness check):None、空字符串、空列表、False等均视为False,其余为True;
- 模型字段若为BooleanField,其值在模板中已为原生Python布尔值,无需额外转换;
- 如需调试,可在模板中临时输出值确认:{{ feature.is_true }}(将显示True或False字符串)。
总结:牢记 “Django模板中没有True/False字面量,用{% if var %}代替{% if var == True %}” ——这是避免条件渲染失效最常见也最关键的实践准则。









