问题描述
我试图让用户能够在我使用 Django
创建的网站上上传图片,并且在使用 DEBIG=True
运行时可以正常上传图片,但问题是当 {{1 }} 图像文件不会上传到 DEBUG=False
,而是上传到 MEDIA_ROOT
。此外,即使在执行 STATIC_Dirs
后已经在 MEDIA_ROOT
中的文件也不会加载到模板中,并且图像 URL 会出现 python manage.py collectstatic
错误。
仍然提供 CSS 和 JS 文件,所以这意味着只有媒体 url 不工作。
以下是我正在使用的代码。
urls.py
404 Page Not Found
settings.py
urlpatterns = [
path('admin/',admin.site.urls),path('',include('Home.urls')),path('account/',include('Account.urls')),]
urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
注意,我使用 STATIC_URL = '/static/'
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,'static')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesstorage'
作为存储后端。
whitenoise
解决方法
当使用 DEBUG=True
时,这意味着您处于开发端,因此您的本地机器能够提供文件(媒体文件),但使用 DEBUG=False
时,它就像您现在处于部署端一样。
要从中提供媒体文件,您需要有一个存储桶(如 amazon S3)来存储这些文件并从那里提供服务。
因此,如果您的媒体文件在 DEBUG=True
时工作正常,则表示一切正常。
现在您只需要一个存放它们的地方。