Python Django模板是否为逻辑表达式实现短路?
假设我的Django模板中有以下内容:Python Django模板是否为逻辑表达式实现短路?,python,django,django-templates,Python,Django,Django Templates,假设我的Django模板中有以下内容: {% if a != None and a.b > 5 %} 如果a为无,我是否可以确定a.b>5不会被评估 IE:Django模板中python在计算逻辑表达式时会短路吗?是的,它会短路。我已经浏览了Django 1.9.2的源代码,并认为我找到了 以下模板将分别向控制台打印“called”和“not” {% if True and log %} # prints "called" {% if False and log %} # does n
{% if a != None and a.b > 5 %}
如果a
为无,我是否可以确定a.b>5
不会被评估
IE:Django模板中python在计算逻辑表达式时会短路吗?是的,它会短路。我已经浏览了Django 1.9.2的源代码,并认为我找到了 以下模板将分别向控制台打印“called”和“not”
{% if True and log %} # prints "called"
{% if False and log %} # does not print "called"
官方文档中似乎没有指定此行为,但存在表示它们指定了,v1.2 beta版除外
在中进行的修复似乎仍然存在于smartif.py的中,因此假设它仍然有效是相当安全的。尝试一下吗?这应该需要两秒钟的时间来测试。它们确实存在短路。
def printer(): print 'called'
class IndexView(TemplateView):
template_name = 'index.html'
def get(self, request, *args, **kwargs):
return self.render_to_response({'log': printer})
{% if True and log %} # prints "called"
{% if False and log %} # does not print "called"