You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django3.2.7模板放app/templates/app子目录报TemplateDoesNotExist如何解决

Django TemplateDoesNotExist 问题解决方案

错误原因

你当前的操作错误点是不符合Django默认的模板命名空间加载规则:

  • 当你开启APP_DIRS = True时,Django会将每个已注册应用下的templates目录作为模板搜索的根路径
  • 你将index.html放在movies/templates/movies/路径下,相对于模板根目录的完整路径就是movies/index.html,直接写index.html的话Django只会在templates根目录下查找,当然找不到对应文件。

无需修改TEMPLATES.DIRS的检查项

  • 首先确认settings.py中TEMPLATES配置的APP_DIRS属性为True,3.2版本默认开启,检查是否被手动修改过:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True, # 必须为True
        'OPTIONS': {
            'context_processors': [
                # 默认上下文处理器省略
            ],
        },
    },
]
  • 确认应用目录结构完全符合规范,层级不能出错:
项目根目录/
├── movies/
│   ├── __init__.py
│   ├── views.py
│   ├── templates/
│   │   └── movies/ # 必须存在与应用同名的子目录作为命名空间
│   │       └── index.html
│   └── admin.py、models.py等其他应用文件
└── 项目主目录/
    ├── __init__.py
    ├── settings.py
    └── urls.py
  • 确认movies应用已经正确加入INSTALLED_APPS列表,注意如果写的是movies.apps.MoviesConfig也属于正确配置,不需要改回纯应用名。

关于模板路径加应用名的疑问

模板路径前加应用名属于Django官方推荐的最佳实践,完全不会提高维护成本,反而能避免多应用开发时出现同名模板被覆盖的问题,所有Django官方内置应用、第三方应用都遵循该规范,完全可以放心使用。

你提到的第一种修改DIRS的方法属于不符合框架设计的临时解决方案,不建议使用,会导致后续项目模板管理混乱。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:24:05