Django提示TemplateDoesNotExist报错但模板路径正确该如何解决?
Django TemplateDoesNotExist报错(路径显示正确)的诱因与解决方法
问题诱因
- 模板渲染参数传递错误:
template.render()方法的第一个入参要求为上下文字典(无自定义上下文时传空字典{}),第二个参数才是request对象。直接将request作为第一个参数传入会触发模板查找逻辑异常,即使物理路径正确也会抛出不存在错误。 - settings.py缺失os模块导入:模板配置中使用了
os.path.join拼接路径,若settings.py头部未引入import os语句,会导致TEMPLATES.DIRS配置实际失效,Django无法定位根目录下的templates文件夹。 - 模板文件/目录权限不足:运行Django服务的系统用户没有templates目录或
home.html文件的读取权限时,会被Django判定为文件不存在。 - 文件命名不匹配:实际文件命名大小写、扩展名与调用时的字符串不一致,比如文件名为
Home.html、home.htm,或文件存放在templates的子目录中但调用时未添加目录前缀。
解决方法
- 修正视图层的模板渲染逻辑,推荐直接使用Django封装的
render快捷方法,简化代码同时避免参数传错:
如果要保留原写法,调整# views.py 优化后代码 from django.shortcuts import render def home(request): return render(request, 'home.html')render方法的参数顺序即可:def home(request): template = loader.get_template('home.html') return HttpResponse(template.render({}, request)) - 检查settings.py头部,确认已导入os模块:
import os # 若使用Django3.2+默认的Path类型BASE_DIR,可改用更稳妥的路径拼接写法,无需依赖os模块 # TEMPLATES配置中的DIRS修改为: # 'DIRS': [BASE_DIR / 'templates'], - 修复目录权限,Linux/Mac环境可执行以下命令给templates目录开放读取权限:
chmod -R 755 templates/ - 核对templates目录下的文件,确认存在命名完全匹配的
home.html文件。
内容的提问来源于stack exchange,提问作者Zainab Lawal
相关产品推荐
相关产品推荐

