Django模板系统中的布尔逻辑

Tra*_* D. 4 django django-templates

如果你将一个上下文变量(例如'woot')设置为None或者只是将其保留为undefined ....

{%if woot%}是的!{% 万一 %}

你有什么期望(没什么).但如果你这样做:

{%if woot == True%}是的!{% 万一 %}

它将打印"是啊!" 即使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!'
Run Code Online (Sandbox Code Playgroud)

这是在Django 1.4.3上

Ala*_*air 5

在Django 1.5(发行说明)中,模板引擎解释True,FalseNone作为相应的Python对象,因此{% if woot == True %}将评估False.

在早期版本的Django中,模板上下文中既不存在woot也不True存在变量.表达式None == None评估为True,所以是啊!被展示