在我的网站中,静态文件已正确加载。但是无法加载包含图像的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)
答案 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,以便将所有收集的静态资产部署到专门为此目的设计的S3实例上。
由于进行了搜索,并且此stackoverflow帖子:Django - Media in production is not working,也可能来自您当前选择的计划:
您正在部署在heroku上。可能是业余爱好计划。按照此计划,该应用程序将在不活动时进入睡眠状态,然后在访问时重新部署。因此,上次运行期间创建的媒体文件将被删除
您应该升级计划,或考虑使用cloudinary之类的第三方存储来存储媒体