图像未显示在我的heroku网站上。静态文件加载良好

时间:2019-10-29 16:03:37

标签: django

在我的网站中,静态文件已正确加载。但是无法加载包含图像的Training.image.url下的媒体文件。

我也尝试在线和在此论坛上寻找解决方案,但没有解决方案。以下是我文件的一小部分。

settings.py


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'portfoliodb',
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': 'localhost',
        'PORT': config('DB_PORT'),
    }
}
-------------------------------------------------------
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'portfolio/static')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL  = '/media/'

urls.py文件

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', Trainings.views.home, name = 'homepage'),
    path('blog/', include('Blog.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

1 个答案:

答案 0 :(得分:1)

如果服务器调试为False,默认情况下Django不提供静态文件。在heroku上有一个有关该特定问题的帮助页面:Django and Static Assets

快速选项:白噪声

您可以安装软件包以非常快速地解决此问题。这是Heroku建议的实际解决方案。

  

Django不支持在生产环境中提供静态文件。但是,出色的WhiteNoise项目可以集成到您的Django应用程序中,并且正是出于这个目的而设计的。

它只会在您的settings.py上显示几行

pip install whitenoise
MIDDLEWARE_CLASSES = (
    # Simplified static file serving.
    # https://warehouse.python.org/project/whitenoise/
    'whitenoise.middleware.WhiteNoiseMiddleware',
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

更复杂的选项:django-storages

如果您对性能有更多要求,我建议您看一下django-storages,以便将所有收集的静态资产部署到专门为此目的设计的S3实例上。

业余爱好计划

由于进行了搜索,并且此stackoverflow帖子:Django - Media in production is not working,也可能来自您当前选择的计划:

  

您正在部署在heroku上。可能是业余爱好计划。按照此计划,该应用程序将在不活动时进入睡眠状态,然后在访问时重新部署。因此,上次运行期间创建的媒体文件将被删除

     

您应该升级计划,或考虑使用cloudinary之类的第三方存储来存储媒体