能否在Django基础模板中使用多个{% block content %}模板块?
Django模板中能否使用多个同名block?
不行,同一个基础模板里不能存在多个同名的{% block %}。
原因:
Django的模板继承机制是通过block的唯一名称来匹配替换内容的。如果两个block都叫content,当子模板中编写{% block content %}时,Django无法区分你要替换哪一个,最终只会生效最后定义的那个block,完全达不到你在不同区域分别填充内容的需求。
正确的做法:
给每个block设置独一无二的名称,比如把第二个block命名为summaries,这样子模板就能精准地对不同区域进行内容填充。
基础模板示例:
<html> <body> <nav> navbar </nav> <div class="content"> {% block content %} {% endblock %} </div> <div class="summaries"> {% block summaries %} {% endblock %} </div> </body> </html>
子模板示例:
{% extends "你的基础模板路径.html" %} {% block content %} 这里填写主内容区的内容,比如文章列表、详情内容等 {% endblock %} {% block summaries %} 这里填写摘要区的内容,比如热门推荐、分类导航等 {% endblock %}
如果某个block你不需要在子模板中修改,完全可以留空,或者在基础模板中写入默认内容——子模板不重写该block时,就会显示基础模板里的默认内容。
内容的提问来源于stack exchange,提问作者Ayat Rahman
相关产品推荐
相关产品推荐

