You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'),]

错误截图

Django模板不存在错误


排查与解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:40:35