2011-08-03 32 views
0

我有一個正確的可以用{{ myclass.myvariable }}顯示爲模板變量是1或0django模板布爾變量顯示爲0,但considred爲True。爲什麼?

但是當我在使用它們的if語句{% if myclass.myvariable %}他們總是被視爲是真實的,即使值爲0

變量是我的模型中的1個字符charfield choices,存儲爲0或1,並且django模板系統chapter-4聲明:
'在Python中,空列表([]),元組(() ),字典({}),字符串(''),零(0)和特殊對象None在布爾上下文中爲False。其他一切都是真的。'

我沒有在模型中使用BooleanField,因爲我也有選擇值2,3,4 ...

這可能是什麼問題嗎?

回答

6

因爲'0'(字符串)不是0(整數)。 '0'是非零長度字符串,這意味着它在布爾上下文中爲True。如果存儲整數,則應該使用IntegerFieldPositiveIntegerField,而不是CharField

+0

感謝,這讓我的軌道上(我一定是在睡覺)。還需要刪除數據庫表和syncdb。最後我切換到了布爾值,因爲django admin然後顯示用戶首選的複選框而不是下拉列表。感謝大家! – RogerV

0

它們被視爲字符串('0'字符串和'1'字符串,而不是0整數和1整數)。

如果你去你的命令行Python和呼叫bool(0)bool(False),你會得到False,但如果你打電話bool('0'),你會得到True

+1

'bool(value)'會做,在Python中不需要雙重否定。 –

+0

@Cat Plus Plus:是的,你是對的 - 我已經更新了我的回覆。 – Tadeck

0

如果您是從CharField讓你的價值觀則是'0',不0

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

...或「布爾(0)」與「布爾('0')」。 –

相關問題