jinja2 - 如何在if语句中放置一个块?
我想用一个if
语句来决定我的{% block content %}
应该填充哪个内容。
我有一个base.html
文件,它里面有一个默认的{% block content %}
,而这个模板是从base.html
扩展出来的。所以我试了这个:
{% extends "base.html" %}
{% if condition == True %}
{% block content %}
<div>blah blah blah blah</div>
{% endblock content %}
{% endif %}
我本来期待如果条件成立,就能看到blah blah blah blah
,如果条件不成立,就能看到默认的内容。
但是无论如何,我都只看到了blah blah blah blah
。
然后我又试了这个:
{% extends "base.html" %}
{% if condition == True %}
{% block content %}
<div>blah blah blah blah</div>
{% endblock content %}
{% else %}
{% block content %}
<div>The Default Thing</div>
{% endblock content %}
{% endif %}
结果我收到了这个错误:
TemplateAssertionError: block 'content' defined twice
我该如何在if
语句里面放一个块呢?
1 个回答
114
你不能让 {% block %}
这个标签变成条件的;一旦你使用了这个标签,这个块就会一直被填充。
相反,你应该把条件放在这个块 内部,然后用 super()
来告诉 Jinja 使用模板中定义的这个块的原始内容:
{% extends "base.html" %}
{% block content %}
{% if condition %}
<div>blah blah blah blah</div>
{% else %}
{{ super() }}
{% endif %}
{% endblock content %}