Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模板是否为逻辑表达式实现短路?_Python_Django_Django Templates - Fatal编程技术网

Python 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

假设我的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 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"