我有正确的模板变量可以{{ myclass.myvariable }}
显示为1或0。
但是当我在if语句{% if myclass.myvariable %}
中使用它们时,即使值为0,它们也始终被认为是真的。
我的模型中的变量是1个字符的字段choices
,存储为0或1,django模板系统第4章声称:
'在Python中,空列表([]),元组(()),字典({}),字符串(''),零(0)和特殊对象None在布尔上下文中为False。其他一切都是真的。'
我没有在模型中使用BooleanField
因为我也有选择值2,3,4 ......
这可能是什么问题?
答案 0 :(得分:6)
因为'0'
(字符串)不是0
(整数)。 '0'
是非零长度字符串,这意味着它在布尔上下文中是True
。如果存储整数,则应使用IntegerField
或PositiveIntegerField
,而不是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