Django模板继承报TemplateDoesNotExist找不到lead_list.html求助
问题根因与修复方案
一、当前直接触发TemplateDoesNotExist: lead_list.html的核心原因
在你的配置中,settings.py开启了APP_DIRS = True,意味着Django会自动遍历INSTALLED_APPS列表中每一个已注册应用下的templates目录作为模板搜索根路径。你目前采用的「应用下templates目录内再建应用同名子目录」的结构,是Django官方推荐的模板组织方式,能够避免多应用下同名模板的加载冲突,该目录结构本身不需要调整。
所有模板的引用路径必须带上templates目录下的子目录前缀,不能直接写裸文件名。常见触发该报错的错误操作有两类:
- 视图函数中
render方法传入的模板路径错误:你当前代码写的是render(request, "lead_list.html", context),会被Django直接当成templates/lead_list.html去搜索,而实际文件在templates/leads/lead_list.html路径下,自然无法匹配。正确的写法应该是render(request, "leads/lead_list.html", context)。 - 对应业务应用必须添加到
settings.py的INSTALLED_APPS列表中:如果应用没有完成注册,Django根本不会扫描该应用下的templates目录,哪怕文件路径完全正确也会抛出找不到模板的异常。
二、关联的模板继承配置说明
你目前在子模板lead_list.html中写的{% extends "leads/base.html" %}路径是符合搜索规则的,只要base.html实际存放在leads/templates/leads/base.html路径下,在修复上述视图路径问题后,继承逻辑可以正常加载,不需要额外修改。
三、快速排查技巧
如果修改后仍无法定位问题,可以在视图中临时添加调试代码,打印Django当前实际的模板搜索路径列表,确认搜索范围包含你的模板存放目录:
from django.template.loader import template_source_loaders for loader in template_source_loaders: print(loader.get_dirs())
如果输出的搜索路径列表中没有你应用下的templates目录,基本可以确认是应用未正确注册的问题。
内容的提问来源于stack exchange,提问作者Agabyok
相关产品推荐
相关产品推荐

