django模板布尔变量显示为0但被视为True。为什么?

时间:2011-08-03 10:37:15

标签: python django templates variables

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

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

我的模型中的变量是1个字符的字段choices,存储为0或1,django模板系统第4章声称:
'在Python中,空列表([]),元组(()),字典({}),字符串(''),零(0)和特殊对象None在布尔上下文中为False。其他一切都是真的。'

我没有在模型中使用BooleanField因为我也有选择值2,3,4 ......

这可能是什么问题?

3 个答案:

答案 0 :(得分:6)

因为'0'(字符串)不是0(整数)。 '0'是非零长度字符串,这意味着它在布尔上下文中是True。如果存储整数,则应使用IntegerFieldPositiveIntegerField,而不是CharField

答案 1 :(得分:0)

它们被视为字符串('0'字符串和'1'字符串,而不是0整数和1整数。)

如果您转到命令行Python并致电bool(0)bool(False),您将获得False,但如果您致电bool('0'),您将获得{{} 1}}。

答案 2 :(得分:0)

如果您从CharField获取值,那么它是'0',而不是0

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