Django生产环境(Heroku)单个App模板不存在问题求助
Django生产环境(Heroku+AWS)下PMS应用模板不存在问题
我在Django项目中新增了PMS应用,项目部署于Heroku,静态文件与数据库托管在AWS。目前仅该应用在生产环境下出现“Template doesn't exist”错误,本地无此问题,多次搜索未找到解决方案。
相关配置代码
settings.py
BASE_DIR = Path(__file__).resolve().parent.parent INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'erecruit', 'compensation', 'PMS', 'crispy_forms', 'forms_fieldset', 'django_filters', 'storages', 'gunicorn', 'foundation_filefield_widget', ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], # 'DIRS': [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', ], }, }, ] AWS_ACCESS_KEY_ID = 'xxxx' AWS_SECRET_ACCESS_KEY = 'xxx' AWS_STORAGE_BUCKET_NAME = 'xxxxx' AWS_DEFAULT_ACL = 'public-read' AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com' AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'} AWS_LOCATION = 'static' STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{AWS_LOCATION}/' STATICFILES_STORAGE = "storages.backends.s3boto3.S3StaticStorage" DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' AWS_S3_FILE_OVERWRITE = False AWS_QUERYSTRING_AUTH = False AWS_S3_VERIFY=False AWS_S3_USE_SSL = False STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),) STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'media') django_heroku.settings(locals())
views.py
@login_required(login_url='loginPage') def home(request): perm = 0 for i in request.user.groups.all(): if i.name == 'PMSupervisors': perm = 1 if perm == 0: context = {} return render(request, 'PMS/pms_home.html',context) if perm == 1: print('this username is a supervisor') context = {} return redirect('supervisor_home')
urls.py
urlpatterns = [ path('PMS/', include('PMS.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL) urlpatterns = [path('', views.home, name='PMS-home'),]
错误截图

排查与解决方案
1. 检查路径大小写与目录结构
Heroku基于Linux环境,文件名严格区分大小写。确认:
- PMS应用内的模板目录结构为
PMS/templates/PMS/,必须嵌套同名子目录 - 模板文件名为
pms_home.html,和视图中调用的路径完全匹配(避免大小写差异,比如不要写成PMS_Home.html)
2. 验证django_heroku.settings()的配置覆盖
django_heroku.settings(locals())可能自动修改部分配置,尝试在调用后手动锁定模板加载规则:
django_heroku.settings(locals()) # 强制保留APP_DIRS为True,确保Django扫描应用内的templates目录 TEMPLATES[0]['APP_DIRS'] = True
3. 确认模板文件已部署到Heroku
登录Heroku服务器检查文件是否存在:
heroku run bash -a 你的应用名称 cd PMS/templates/PMS/ ls
如果文件缺失,检查.gitignore是否误排除了templates目录,重新提交模板文件后部署。
4. 修正静态文件路由错误
你的urls.py中存在参数错误,可能引发配置异常:
# 错误写法 urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL) # 修正为 urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
5. 临时开启调试查看加载路径
临时在settings.py中设置DEBUG = True(调试完成后关闭),重启应用后错误页面会显示Django尝试查找的所有模板路径,根据路径定位问题根源。
内容的提问来源于stack exchange,提问作者Ramy Khalil
相关产品推荐
相关产品推荐

