2013-02-08 143 views
4

如果设置一个情境变量(例如,“活泉”)作为无或让它未定义....布尔逻辑

{%如果活泉%}呀! {%endif%}

是否您期望(无)。但如果你这样做:

{%if woot == True%}是啊! {%endif%}

它会打印出“是啊!”即使woot是None/undefined。这看起来非常不直观。显然,我可以解决这个问题......但我想了解根本原因。任何想法,为什么发生....?

证明:

from django.template import Context, Template 

x = Template("{% if woot %}Yeah!{% endif %}") 
y = Template("{% if woot == True %}Yeah!{% endif %}") 

x.render(Context({})) # => u'' 
y.render(Context({})) # => u'Yeah!' 

x.render(Context({'woot':None})) # => u'' 
y.render(Context({'woot':None})) # => u'Yeah!' 

这是在Django上1.4.3

回答

5

在Django中1.5(release notes),模板引擎解释TrueFalseNone作为相应的Python对象,所以{% if woot == True %}将评估为False

在早期版本的Django中,模板上下文中不存在变量wootTrue。表达式None == None评估为True,所以是的!显示

+0

谢谢。完全合理的解释。还有一个原因,我期待升级到1.5。 –