修改Django模板继承后出现栈溢出错误,无法定位问题来源
Django模板栈溢出问题修复方案
核心原因
你遇到的栈溢出是Django模板渲染时无限递归导致的,偶发是因为开发模式下模板自动重载、缓存加载顺序不稳定,有时会命中递归逻辑,有时不会。
触发场景排查
- 循环继承:检查所有模板的
{% extends %}声明,确认不存在A继承B、B又继承A的闭环,尤其注意是否存在两个同名base.html(分别在根模板目录和app模板目录)互相继承的情况 - 循环引入:检查被include的模板是否反向引入了父模板,比如
pagination.html如果误写了{% include "app/dashboard.html" %},就会形成dashboard引入pagination、pagination又引入dashboard的无限循环 - block递归调用:如果重写
contentblock时误加了{{ block.super }},父模板content块又调用子模板逻辑,也会触发递归
快速验证方法
- 先注释掉
dashboard.html中的{% include 'app/pagination.html' with object=page_obj %}代码行,清理项目所有__pycache__目录后重启服务,若不再报错则问题出在分页模板关联逻辑 - 若仍报错,临时把
dashboard.html的{% extends "app/base.html" %}替换为base.html的完整代码,直接渲染测试,排除继承链问题
现有代码优化建议
你提供的pagination.html中用{% block pag %}包裹内容属于冗余代码,被include的模板不需要额外定义block,直接删除{% block pag %}和对应的{% endblock pag %}即可,避免不必要的block解析冲突。
内容的提问来源于stack exchange,提问作者kakakakakakakk
相关产品推荐
相关产品推荐

