Django DEBUG=False 不会将文件上传到 STATIC_ROOT

问题描述

我试图让用户能够在我使用 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 时工作正常,则表示一切正常。

现在您只需要一个存放它们的地方。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...