%endwith%之前%空%(在Django模板中)

时间:2017-03-03 08:50:49

标签: django django-templates

需要澄清一个快速概念。

在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 %}

前者是合法的,而不是后者的原因是什么?在文档中没有完全看到有关此内容的任何内容。

1 个答案:

答案 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块,但具体是forempty之间的块。

如果您考虑一下,每次循环时都会应用with,对于循环中的每个项目。每次围绕循环时,只会运行forempty之间的位 - emptyendfor之间的位不是。那么如何在每次循环时启动with,但只关闭它一次(或从不,就好像循环为空,with永远不会被调用但是endwith会吗?它没有意义。