Django中{% include %}标签抛出TemplateDoesNotExist错误的求助
解决Django中{% include %}找不到同目录模板的问题
嘿,我之前也踩过这个坑!既然你已经确认文件名拼写无误,且base.html和navbar.html在同一文件夹,那问题大概率出在Django的模板查找配置或者加载逻辑上,给你几个具体的排查和解决方向:
1. 检查项目的模板路径配置(settings.py)
Django的模板加载器默认会从两个地方找模板:已安装app的templates目录,以及TEMPLATES配置里DIRS指定的路径。你需要确认你的模板目录被正确配置:
- 如果你的模板文件放在项目根目录的
templates文件夹,请确保settings.py中的TEMPLATES配置里DIRS包含这个路径:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 这里要指向你的模板根目录 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] - 如果你的模板放在某个app的
templates文件夹(比如your_app/templates/),请确保这个app已经被添加到INSTALLED_APPS中:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'your_app_name', # 务必添加你的app名称 ]
2. 确认模板引用的路径格式
即使两个文件在同一文件夹,Django的模板加载逻辑可能需要更明确的路径:
- 如果你的模板是放在app的
templates子目录下(比如your_app/templates/your_app/),那引用时需要加上app的前缀:{% include "your_app/navbar.html" %} - 另外注意文件名大小写:Windows系统不区分文件名大小写,但Linux/macOS是严格区分的,如果你的部署环境是Linux,本地开发用Windows,很可能因为大小写不匹配导致找不到模板。
3. 清理Django模板缓存
有时候Django会缓存旧的模板配置,就算你修改了settings.py也不会立即生效。可以运行以下命令清理缓存,然后重启服务器:
python manage.py clearcache
4. 检查文件权限
如果是在Linux/macOS环境下,要确保服务器进程(比如gunicorn或者runserver的进程)有读取navbar.html文件的权限:
- 文件权限建议设置为
644(所有者可读可写,其他用户可读) - 目录权限建议设置为
755(所有者可读可写可执行,其他用户可读可执行)
按照上面的步骤排查,应该就能解决TemplateDoesNotExist的问题啦!
内容的提问来源于stack exchange,提问作者Tknoobs
相关产品推荐
相关产品推荐

