Django模板找不到问题求助:已查同类问题仍未解决
我来帮你一步步排查这个头疼的问题——这种情况我在开发中碰到过好多次,大多是一些容易被忽略的细节导致的,咱们逐个排查:
先核对模板目录结构是否规范
Django默认的模板搜索逻辑是:先找项目根目录的templates(如果配置了),再去每个已注册app下的templates目录。为了避免模板重名冲突,强烈建议在app的templates下再建一个和app同名的子目录,比如你的app叫myapp,模板路径应该是myapp/templates/myapp/your_template.html,而不是直接放在myapp/templates/下。检查settings.py的模板配置是否正确
打开settings.py找到TEMPLATES配置块,重点确认这两个参数:DIRS:如果使用项目级公共模板,要把项目根目录的templates路径加入,比如DIRS: [BASE_DIR / 'templates']APP_DIRS:必须设为True,否则Django不会自动搜索各app下的templates目录
给你一个标准的配置参考:
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', ], }, }, ]确认视图中调用的模板名称完全准确
比如你的模板路径是myapp/templates/myapp/home.html,视图里必须写return render(request, 'myapp/home.html'),不能只写home.html(除非你在DIRS里指定了子目录,但不推荐这么做)。另外要注意大小写敏感:Windows系统可能不区分,但Linux/macOS是严格区分的,Home.html和home.html会被当成两个不同的文件。检查你的app是否已添加到INSTALLED_APPS
如果模板所在的app没有被加入settings.py的INSTALLED_APPS列表,Django根本不会去搜索这个app下的模板目录。比如:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', ... 'myapp', # 这里一定要加上你的app名称 ]清理缓存并重启服务器
有时候Django会缓存模板目录的索引,尤其是你刚调整过目录结构之后。可以运行命令清理缓存:python manage.py clearcache或者直接重启你的开发服务器,很多时候重启就能解决缓存导致的找不到问题。
利用调试页面定位具体路径
如果上面的步骤都试过还是不行,打开Django的调试页面(确保DEBUG = True),在错误信息里找到Template-loader postmortem部分,这里会列出Django尝试搜索的所有模板路径。你可以对照这个列表,看看你的模板是不是没在这些路径里,或者路径拼写有误。
比如调试信息显示Django尝试了/project/myapp/templates/home.html,但你的模板实际在/project/myapp/templates/myapp/home.html,那就能立刻找到问题所在了。
内容的提问来源于stack exchange,提问作者hopieman

