Django 2.0.5创建启动页时遭遇TemplateDoesNotExist错误求助
从你的错误信息和配置来看,核心问题是Django的模板加载器没有搜索到你项目根目录下的templates文件夹,导致它只在内置的admin和auth app的模板目录里查找,自然找不到你自定义的trader/index.html。
问题根源分析
你的项目结构里,templates文件夹是放在项目根目录(/home/robin/www/trader/)下的,但你在settings.py的TEMPLATES配置中:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], # 这里是空的,没有添加项目根目录的templates路径 'APP_DIRS': True, # ...其他配置 }, ]
当APP_DIRS=True时,Django只会去每个已安装app内部的templates子目录搜索模板,但你的trader app里并没有创建自己的templates文件夹,所以Django跳过了它,只去有templates目录的内置app(admin、auth)里找,结果当然找不到你的模板。
两种解决方案(任选其一即可)
方案1:把项目根目录的templates添加到模板搜索路径(推荐)
修改settings.py中的TEMPLATES配置,将项目根目录的templates路径加入DIRS列表:
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', ], }, }, ]
BASE_DIR已经在你的settings里定义为项目根目录,所以os.path.join(BASE_DIR, 'templates')会正确指向/home/robin/www/trader/templates/,Django之后就会优先搜索这个目录下的模板。
方案2:将模板移到trader app内部的templates目录
如果你更倾向于app级别的模板管理,可以在trader app目录下创建templates/trader/结构:
- 执行命令创建目录:
mkdir -p trader/templates/trader/ - 把
/home/robin/www/trader/templates/trader/index.html移动到这个新目录:mv templates/trader/index.html trader/templates/trader/
这样APP_DIRS=True会自动搜索到trader app内部的templates目录,找到你的模板。
验证修改
完成上述任一方案后,重启Django开发服务器,访问http://coinz.com/应该就能正常加载trader/index.html模板了。
内容的提问来源于stack exchange,提问作者mine

