如何解决Django中的TemplateDoesNotExist错误?
以下是几个你可能没注意到的排查点:
确认
BASE_DIR的正确性,替换自定义的SETTINGS_PATH
很多时候自定义的SETTINGS_PATH路径计算错误,直接用Django默认的BASE_DIR更可靠。BASE_DIR是项目根目录的绝对路径,配置应该写成:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 这里用BASE_DIR 'APP_DIRS': True, 'OPTIONS': { # 其他配置... }, }, ]如果你坚持用
SETTINGS_PATH,先打印出来确认是不是项目根目录:print(SETTINGS_PATH),确保它指向包含templates文件夹的目录。检查
TEMPLATES配置结构是否正确
你提到的TEMPLATE_DIR可能是拼写错误,Django的正确配置项是TEMPLATES列表中字典的DIRS字段,必须把模板目录放在这个列表里,而非单独的TEMPLATE_DIR变量。确认
INSTALLED_APPS中添加了你的应用
即使是项目级模板,APP_DIRS: True需要依赖INSTALLED_APPS里的应用配置,确保你的app已经添加进去:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', # ...其他默认应用 'your_app_name', # 这里要加你的app ]检查模板文件的引用路径
如果模板放在templates下的子文件夹(比如templates/your_app/index.html),渲染时要写完整路径:return render(request, 'your_app/index.html'),而非只写index.html。清除Django缓存并重启服务
修改配置后一定要重启runserver,如果用了缓存框架,执行python manage.py clearcache清除缓存,避免旧配置生效。检查文件名和大小写
Linux/macOS系统对文件名大小写敏感,确保模板文件名和你渲染时写的完全一致(比如Index.html和index.html是两个文件)。
内容的提问来源于stack exchange,提问作者kamakia

