如何修复Django报错‘template does not exist: home.html’?
解决Django模板不存在错误:TemplateDoesNotExist: home.html
问题分析
你在视图中引用模板时使用了main/home.html和main/base.html,但当前模板文件直接放在根templates文件夹下,结合settings配置中APP_DIRS=True的规则,Django无法匹配到对应模板路径,导致报错。
解决方法
方法一:遵循Django规范的app内模板结构(推荐)
- 假设你的app名称为
main,在app目录下创建templates/main子目录,调整后的目录结构应为:
项目根目录/ main/ templates/ main/ base.html home.html views.py models.py 项目配置文件夹/ settings.py
- 确保
settings.py的INSTALLED_APPS中已注册main:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'main', # 确认该行存在 ]
- 保持现有视图代码不变,
APP_DIRS=True会让Django自动搜索每个已注册app下的templates目录,此时main/home.html就能被正确识别。
方法二:使用项目根目录的templates文件夹
若希望模板放在项目根的templates目录下:
- 修改
settings.py中的TEMPLATES配置,将根templates目录添加到DIRS中:
import os TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(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', ], }, }, ]
- 可选两种子方案:
- 方案A:修改视图中的模板引用路径,直接使用文件名:
def home(response): return render(response, "home.html", {'name':'test'}) def index(response, id): ls = ToDoList.objects.get(id=id) return render(response, "base.html", {"name":ls.name}) - 方案B:在根
templates目录下创建main子文件夹,将base.html和home.html移入,保持现有视图代码不变。
- 方案A:修改视图中的模板引用路径,直接使用文件名:
内容的提问来源于stack exchange,提问作者susy
相关产品推荐
相关产品推荐

