【问题标题】:Boolean logic in Django template systemDjango模板系统中的布尔逻辑
【发布时间】:2013-01-24 01:59:45
【问题描述】:

如果您将上下文变量(例如 'woot')设置为 None 或将其保留为未定义......

{% if woot %} 是的! {% endif %}

做你所期望的(没有)。但如果你这样做:

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

它将打印“是的!”即使 woot 是无/未定义的。这似乎很不直观。显然,我可以解决这个问题......但我想了解根本原因。任何想法为什么会发生......?

证明:

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 上

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    在 Django 1.5 (release notes) 中,模板引擎将 True、False 和 None 解释为对应的 Python 对象,因此 {% if woot == True %} 的计算结果为 False。

    在早期版本的 Django 中,woot 和 True 变量都不存在于模板上下文中。表达式 None == None 的计算结果为 True,因此显示 Yeah!

    【讨论】:

    • 谢谢。完全合理的解释。我期待升级到 1.5 的另一个原因。
    猜你喜欢
    • 2013-01-28
    • 2011-06-10
    • 1970-01-01
    • 2012-02-27
    • 2018-12-30
    • 2011-12-22
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多