我有一个包含另一个模板的模板。这个包含的模板中有块标签。
示例:
base.html文件
BASE
{% block title %}Base Title{% endblock %}
{% block content %}{% endblock %}
template1.html
{% extends 'base.html' %}
{% block title %}Extended Title{% endblock %}
{% block content %}
Extended content
{% include 'include.html' %}
{% endblock %}
include.html
{% block title %}Include Title{% endblock %}
{% block another_content %}Include Content{% endblock %}
我期待的是,如果我渲染template.html我应该得到,我在1.1.1
下做BASE
Extended Title
Extended content
Include Title
Include Content
但是当我切换到1.2.1和1.2.3时,我实际上得到了这个:
BASE
Extended Title
Extended Content
Extended Title
Include Content
如您所见,include.html中的标题栏被替换为template1.html的标题栏。仅当块名称相同时才会发生此替换,因此如果我更改include.html中的标题块,则不会发生这种情况。在我看来,它同时包括和延伸?任何人都知道这是否是预料/我做错了什么?
答案 0 :(得分:3)
如果您在extends
中未使用 include.html
,则此行为是正常的 - 我认为1.1.1中存在错误。
摘自官方文件:
最后,请注意,您无法在同一模板中定义多个具有相同名称的{%block%}标记。存在这种限制是因为块标签在“两个”方向上工作。也就是说,块标记不仅提供填充孔 - 它还定义填充父级孔的内容。如果模板中有两个同名的{%block%}标记,则该模板的父级将不知道要使用哪个块的内容。
在这里阅读整篇文章:Template Inheritance
答案 1 :(得分:-1)
如果那是你想要的,那么include.html根本不应该包含任何块,即:
Include Title
Include Content