如何在Django的template文件夹下创建多级子目录并正常渲染模板
问题原因
- 你当前配置的模板查找路径
DIRS指向项目根目录下的templates文件夹,但你实际的模板文件都存放在myapp应用目录下的templates子目录中 - Linux系统下目录名大小写敏感,需要确认代码中写的路径和实际目录名大小写完全匹配
解决方法
两种方案二选一即可:
方案1:保留模板放在应用目录下(推荐,符合Django可插拔设计)
你已经开启了APP_DIRS: True配置,且myapp已经加入INSTALLED_APPS列表,只需要确认两点:
- 实际目录名称和代码中调用的路径大小写完全一致:比如你代码里写的是
myapp/Layouts/layout1.html,就要确保myapp/templates/myapp/下的目录名确实是Layouts(首字母大写),如果是小写的layouts就会触发找不到模板的报错 - 修改目录结构后重启Django服务,新的目录结构才会被识别
方案2:模板统一放在项目根目录管理
如果你希望所有应用的模板集中存放:
- 在项目根目录(和
myapp、内层MyProject文件夹同级的目录)新建templates文件夹 - 把原来
myapp/templates/目录下的myapp文件夹整个挪到根目录刚新建的templates文件夹里 - 重启Django服务即可,你原有的
DIRS配置已经指向根目录的templates文件夹,不需要额外修改配置
排查小技巧
如果修改后还是报错,可以在视图中加入打印代码,查看Django实际扫描的模板路径,快速定位问题:
from django.template.loaders.app_directories import get_app_template_dirs from django.conf import settings def index(request): # 控制台输出所有模板查找路径 print("全局模板路径:", settings.TEMPLATES[0]['DIRS']) print("应用模板路径:", list(get_app_template_dirs('templates'))) return render(request,'myapp/Layouts/layout1.html')
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

