Django模板系统中的布尔逻辑

4
如果你将上下文变量(例如 'woot')设置为None或只是未定义......{% if woot %} Yeah! {% endif %}将不会有任何输出。但如果你这样做:{% if woot == True %} Yeah! {% endif %}即使woot是None/未定义,它也会打印出“Yeah!”。这似乎非常不直观。显然,我可以解决这个问题...但我想了解根本原因。你有什么想法吗?证明如下:
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版本的

1个回答

5
在Django 1.5(发布说明)中,模板引擎将TrueFalseNone解释为相应的Python对象,因此{% if woot == True %}将评估为False
在早期版本的Django中,wootTrue变量都不存在于模板上下文中。表达式None == None的评估结果为True,因此显示Yeah!

谢谢。非常合理的解释。这是我期待升级到1.5的又一个原因。 - Travis D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接