如果您将上下文变量(例如'woot')设置为None,或者只是将其保留为未定义....
{%if woot%}是的! {%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上
答案 0 :(得分:5)
在Django 1.5(release notes)中,模板引擎将True
,False
和None
解释为相应的Python对象,因此{% if woot == True %}
将评估为False
。
在早期版本的Django中,模板上下文中不存在woot
和True
变量。表达式None == None
的计算结果为True
,因此显示是的!