Django 使用 if else 条件加载模板标签

问题描述 投票:0回答:1

问题看似很简单,但我却无法解决。

看下面两个例子。两者都给我 TemplateSyntaxError。(分别) 虽然只有一个应该给出错误。

这是为什么?

(没有名为aa的模板标签)

您可以通过在模板中一次放入一个来检查这一点。

看来 Django

load
模板标签无论放在哪里都会运行(注释标签除外)。


{% if "4" == "3" %}

{% else %}

  {% load aa %}


{% endif %}

{% if "4" == "3" %}

  {% load aa %}

{% else %}

{% endif %}

django templates django-templates
1个回答
0
投票

看下面两个例子。两者都给我 TemplateSyntaxError。(单独)虽然只有一个应该给出错误。

Django 不会查看

{% 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)
块中定义的。

无论如何,您不应该有条件地加载模板库,这会使代码路径不可预测并且容易出错。只需加载模板顶部的项目即可。

© www.soinside.com 2019 - 2024. All rights reserved.