
在django html模板中,布尔值判断不能照搬python语法——`{% if feature.is_true == true %}` 会失效,因为模板引擎将 `true` 视为未定义变量(默认解析为 `none`),导致条件恒为假。正确做法是直接利用django模板对布尔字段的隐式真值判断。
Django模板语言对布尔字段(如模型中的 BooleanField)天然支持“真值测试”(truthiness check)。只要 feature.is_true 是 Python 的 True(数据库中存储为 1 或 True),{% if feature.is_true %} 就会成立;若为 False、None、空字符串或空列表,则跳过块内容。
✅ 正确写法(简洁且推荐):
{% if feature.is_true %}
Yes, this is True
{% endif %}❌ 错误写法(模板中无效):
{% if feature.is_true == True %} {# 'True' 被当作变量名,未定义 → None → False #}
Yes, this is True
{% endif %}⚠️ 补充说明:
- Django 模板不支持 == True、is True、True 字面量或 bool() 函数调用;
- 若需显式对比(极少数场景),可使用 {{ feature.is_true|yesno:"true,false" }} 进行字符串渲染,但逻辑判断请始终用 if field_name;
- 确保模型字段定义为 is_true = models.BooleanField(default=False),并在视图中正确传入含该字段的 features QuerySet;
- 调试技巧:可在模板中临时添加 {{ feature.is_true }} 查看实际渲染值(输出 True/False 字符串),确认数据已正确传递。
总结:Django模板的 if 标签本质是“真值检查”,而非严格相等比较。养成直接写 {% if obj.field %} 的习惯,既符合模板规范,也避免隐式错误。










