Django模板中布尔值条件判断的正确写法

2次阅读

Django模板中布尔值条件判断的正确写法

在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 %}” ——这是避免条件渲染失效最常见也最关键的实践准则。

text=ZqhQzanResources