Django拆分多环境配置后访问根路径报TemplateDoesNotExist错误
问题原因
- 核心原因是拆分配置文件后,
settings/base.py中的BASE_DIR路径计算错误,导致Django无法定位到项目根目录下的templates文件夹 - 原默认单文件配置时,
settings.py存放在<项目同名文件夹>目录下,默认BASE_DIR = Path(__file__).resolve().parent.parent计算出来的值是项目根目录,和模板存放路径匹配 - 拆分配置后,
base.py存放在<项目同名文件夹>/settings/目录下,沿用原来的BASE_DIR计算逻辑,得到的路径是<项目同名文件夹>目录,并非项目根目录,此时你配置的TEMPLATES.DIRS = [BASE_DIR / 'templates']会去<项目同名文件夹>/templates下找模板,自然找不到存放在项目根目录的模板文件 - admin和默认Django首页能正常访问的原因是:这两个页面的模板属于Django内置app自带的模板,
TEMPLATES.APP_DIRS = True配置会自动从已注册app的templates目录下找模板,不受自定义根模板目录配置的影响
解决方案
方案1:修正base.py中的BASE_DIR定义
打开settings/base.py,修改BASE_DIR的计算逻辑,多向上跳转一级目录:
# 原单文件配置适用的写法 # BASE_DIR = Path(__file__).resolve().parent.parent # 拆分配置后的正确写法 BASE_DIR = Path(__file__).resolve().parent.parent.parent
修改完成后保持TEMPLATES配置不变即可,示例:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, # 其余配置保持默认即可 }, ]
方案2:单独调整模板目录配置(无需修改BASE_DIR)
如果不想修改全局BASE_DIR配置,也可以单独调整TEMPLATES的DIRS参数:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [Path(__file__).resolve().parent.parent.parent / 'templates'], 'APP_DIRS': True, # 其余配置保持默认即可 }, ]
验证操作
修改完成后重启Django服务,再次访问根路径即可正常加载test.html模板。
注意要确保你的dev.py开头已经写了from .base import *语句,正确导入base.py的所有配置,避免配置不生效。
内容的提问来源于stack exchange,提问作者rob
相关产品推荐
相关产品推荐

