Django使用extends标签报TemplateDoesNotExist但加载器识别文件存在
问题原因与解决方案
- extends标签误用相对路径
如果模板中extends标签写为{% extends "./t_base_menu.html" %}等带./、../前缀的相对路径格式,Django会相对于当前home/index.html模板所在的目录查找父模板,不会遍历全局配置的TEMPLATE_DIRS路径。修正方法为直接写文件名:
{% extends "t_base_menu.html" %}
- 根模板目录权限不足
运行Django进程的系统用户对project/templates目录无读取权限,对project/home/templates目录有权限,因此移动文件后功能正常。Linux环境下可执行以下命令修复权限:
chmod -R 755 project/templates
- SITE_ROOT运行时路径偏差
如果SITE_ROOT用相对路径定义,不同启动方式(开发服务启动、WSGI部署)的工作目录不同,会导致拼接的TEMPLATE_DIRS路径与实际路径不匹配。可在settings.py中添加调试代码确认路径:
print "TEMPLATE_DIRS 实际生效路径:", join(SITE_ROOT, 'templates')
确认输出路径与t_base_menu.html实际存放的父目录完全一致即可。
- 文件名大小写不匹配
Linux等大小写敏感的系统中,模板中写的文件名与实际文件大小写不一致(如实际文件名为t_Base_menu.html,模板中写为全小写)也会触发该错误,核对文件名大小写即可。
内容的提问来源于stack exchange,提问作者Vlad Blaga
相关产品推荐
相关产品推荐

