使用Django模板extends与include后页面未显示预期内容的问题排查
问题原因及解决办法
问题出在模板继承与include的作用域冲突:
- 你在
base.html里用{% include %}引入了body.html,但content块是定义在被引入的body.html中。 - Django的模板继承规则是:子模板(
home.html)只能覆盖直接继承的父模板(base.html)中定义的块,无法覆盖通过include引入的子模板里的块。
修复方案(两种任选其一)
方案1:将content块移到base.html中
修改base.html:
{% load static %} <!DOCTYPE html> <html lang="en"> {% include 'weapons/head/head.html' %} <body> {% block content %}{% endblock content %} </body> </html>
同时可以删除body.html,或根据需求调整其内容(移除里面的content块)。
方案2:调整模板继承结构
让body.html成为可继承的模板,修改base.html:
{% load static %} <!DOCTYPE html> <html lang="en"> {% include 'weapons/head/head.html' %} {% extends 'weapons/body/body.html' %} </html>
注:这种方式需要注意模板继承的层级逻辑,更推荐方案1的直接写法。
修改完成后重启服务,访问home.html就能正常显示Hello!了。
内容的提问来源于stack exchange,提问作者Python Django
相关产品推荐
相关产品推荐

