部署Django项目至Heroku时遭遇TemplateDoesNotExist错误
我之前也踩过一模一样的坑!本地跑起来功能全正常,一部署到Heroku就报模板找不到,折腾了好一会儿才搞定,给你几个最可能的排查方向:
重点排查大小写问题:Heroku用的是Linux服务器,文件名和路径严格区分大小写,但本地Windows/macOS通常不区分。你配置里写的是
'DIRS': [os.path.join(BASE_DIR, 'Templates')](首字母大写),先去确认你项目里的模板文件夹实际是叫Templates还是templates(小写),把配置里的路径改成和实际文件夹完全一致的大小写,比如如果是小写就改成os.path.join(BASE_DIR, 'templates')。确认模板文件夹已经提交到Git:有时候.gitignore文件会不小心把模板目录排除在外,导致Heroku上根本没有这个文件夹。检查下你的.gitignore,别让它忽略了
Templates(或templates)目录,然后执行以下命令重新提交:git add Templates/ git commit -m "Add template folder to repo" git push heroku main验证BASE_DIR的路径是否正确:有时候Heroku上的BASE_DIR指向和本地有差异,你可以通过Heroku命令行验证:
heroku run python manage.py shell然后在shell里输入:
import os print(BASE_DIR) print(os.path.exists(os.path.join(BASE_DIR, 'Templates'))) # 替换成你实际的文件夹名如果第二个命令返回
False,说明路径不对,建议改用Django 3.1+支持的路径对象写法,更可靠:# settings.py里先导入path from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent # 然后修改TEMPLATES的DIRS 'DIRS': [BASE_DIR / 'templates'], # 这里写实际的文件夹名检查app内模板的结构:如果你是把模板放在Home应用内部(依赖
APP_DIRS=True),那正确的路径应该是Home/templates/Home/index.html,而不是根目录的Templates/Home/index.html。如果是这种情况,确保app内的templates文件夹也提交到Git了。
按照上面的步骤排查,大概率能解决你的问题——我当时就是因为大小写的问题踩的坑😅
内容的提问来源于stack exchange,提问作者Henry

