问题看似很简单,但我却无法解决。
看下面两个例子。两者都给我 TemplateSyntaxError。(分别) 虽然只有一个应该给出错误。
(没有名为aa的模板标签)
您可以通过在模板中一次放入一个来检查这一点。
看来 Django
load
模板标签无论放在哪里都会运行(注释标签除外)。
{% if "4" == "3" %}
{% else %}
{% load aa %}
{% endif %}
{% if "4" == "3" %}
{% load aa %}
{% else %}
{% endif %}
看下面两个例子。两者都给我 TemplateSyntaxError。(单独)虽然只有一个应该给出错误。
{% load … %}
模板标签[Django-doc]的上下文。无论路径如何,它都会加载它们。事实上,这两个模板:
{% if True %}
{% load static %}
{% endif %}
{% static "bla" %}
和:
{% if False %}
{% load static %}
{% endif %}
{% static "bla" %}
工作,即使人们期望只有第一个会成功,因为
{% if False %}
失败了。
因此 Django 的模板语言编译为一棵树,但是
if
语句不能作为完整的 if-then-else 块:由于 {% load … %}
模板标记通过,它将加载库并导出其余部分中的项目文件的内容,有点像 C++ 中的 #define
指令并不关心它是否是在 if(condition)
块中定义的。
无论如何,您不应该有条件地加载模板库,这会使代码路径不可预测并且容易出错。只需加载模板顶部的项目即可。