需要澄清一个快速概念。
在Django模板中进行实验,我发现这是合法的:
{% for object in object_list %}
{% with forms|get_item:object.id as replyform %}
{% endwith %}
{% empty %}
Sorry, the object list is empty!
{% endfor %}
然而,以下内容给出了TemplateSyntaxError
错误(Invalid block tag: 'empty', expected 'endwith'
):
{% for object in object_list %}
{% with forms|get_item:object.id as replyform %}
{% empty %}
Sorry, the object list is empty!
{% endwith %}
{% endfor %}
前者是合法的,而不是后者的原因是什么?在文档中没有完全看到有关此内容的任何内容。
答案 0 :(得分:3)
您必须正确嵌套标签。如果你使用缩进,它会变得更清晰:
{% for object in object_list %}
{% with forms|get_item:object.id as replyform %}
{% endwith %}
{% empty %}
Sorry, the object list is empty!
{% endfor %}
虽然这没有意义:
{% for object in object_list %}
{% with forms|get_item:object.id as replyform %}
{% empty %}
Sorry, the object list is empty!
{% endwith %}
{% endfor %}
整个with/endwith
语句需要在内中启动它。该块是for/empty/endfor
块,但具体是for
和empty
之间的块。
如果您考虑一下,每次循环时都会应用with
,对于循环中的每个项目。每次围绕循环时,只会运行for
和empty
之间的位 - empty
和endfor
之间的位不是。那么如何在每次循环时启动with
块,但只关闭它一次(或从不,就好像循环为空,with
永远不会被调用但是endwith
会吗?它没有意义。