Django模板布尔变量显示为0但被认为是True,为什么?

0 投票
3 回答
2401 浏览
提问于 2025-04-16 22:47

我有一些模板变量,可以用 {{ myclass.myvariable }} 正确显示为 1 或 0。

但是当我在 if 语句中使用它们 {% if myclass.myvariable %} 时,它们总是被认为是 True,即使值是 0。

这些变量在我的模型中是 1 个字符的字符字段 choices,存储为 0 或 1,而 Django 模板系统的第 4 章说:
'在 Python 中,空列表([])、元组(())、字典({})、字符串('')、零(0)和特殊对象 None 在布尔上下文中都是 False。其他所有情况都是 True。'

我没有在模型中使用 BooleanField,因为我还有选择值 2、3、4……

这可能是什么问题呢?

3 个回答

0

它们被当作字符串来处理(也就是说是 '0' 字符串和 '1' 字符串,而不是 0 整数和 1 整数)。

如果你在命令行的 Python 中输入 bool(0)bool(False),你会得到 False,但是如果你输入 bool('0'),你会得到 True

1

如果你从一个 CharField 中获取值,那么它是 '0',而不是 0

>>> True if 0 else False
False
>>> True if '0' else False
True
6

因为 '0'(字符串)和 0(整数)是不同的。'0' 是一个非空字符串,这意味着在布尔上下文中它被认为是 True。如果你要存储整数,应该使用 IntegerFieldPositiveIntegerField,而不是 CharField

撰写回答