Django 媒体文件在生产时未显示 Debug = False - Django 1.10

Django media files not showing with Debug = False on production - Django 1.10

我目前有静态文件和媒体两种文件 files.The 静态文件包含我的 css,js 和其他静态内容。媒体文件包含用户 uploads.The 静态文件夹就在我部署的机器上的媒体 folder.Now 旁边的内容。如果我设置 DEBUG = False 我的静态文件显示得很好但是我的媒体内容永远不会显示。我收到 404 not found 错误。 我的问题是当 DEBUG = False 时如何在生产环境中显示媒体内容。使用 DEBUG= True 似乎一切正常?我阅读了以下 page 并尝试了这些东西。

1-尝试为静态媒体创建单独的文件夹,就像静态内容一样。 目前我的静态内容由 collectstatic 命令管理。我在 webfaction.I 上使用 apache 有一个名为 static_content 的静态文件夹,当我 运行 ./manage.py collectstatic 静态文件夹中的所有内容都被复制到 static_content folder.I 尝试创建另一个名为 static_media 的静态文件夹。然而,当我 运行 ./manage.py collectstatic 我的 media 文件夹的内容被复制到 static_content 而不是像它应该的那样 static_media 。谁能告诉我为什么 collectstatic 命令没有将内容粘贴到 static_media 而不是?

这就是我的配置

ALLOWED_HOSTS = [
   "*",
   'mywebsite.com',
   'www.mywebsite.com.com',
]


STATIC_URL = 'http://mywebsite.com.com/static/'
STATIC_ROOT = '/home/admin/webapps/static_content'
STATICFILES_DIRS = (
                        '/home/admin/webapps/mainfolder/mainapp/static',
                        '/home/admin/webapps/mainfolder/mainapp/media',
                   )
PROJECT_PATH = os.path.join(BASE_DIR, 'static')

MEDIA_URL = 'http://mywebsite.com.com/media/'
MEDIA_ROOT = '/home/admin/webapps/static_media' 

这就是我的 urls.py 的样子

admin.autodiscover()
urlpatterns = [
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我是否使用正确的方法创建一个单独的文件夹来管理我的媒体内容,就像在 DEBUG=False 时管理我的静态内容一样?如果是这样,那么为什么 collectstatic 命令将我所有的媒体内容转储到我的 static_content 文件夹而不是 static_media 文件夹中?此外,如果我在用户上传数据时使用静态文件夹来管理我的媒体内容,那么这些数据将上传到 mediastatic_media

您不应该使用 collectstatic 作为您的媒体目录。从 STATICFILES_DIRS 中删除 '/home/admin/webapps/mainfolder/mainapp/media',然后设置

MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'

完成此操作后,static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 应在 DEBUG = True 时提供媒体文件。

对于 DEBUG = False,您必须 configure Apache 才能提供媒体文件。

在您的 urls.py 文件中:

添加这一行

from django.views.static import serve

在 urlpatterns 中添加这两个 url:

url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),

它对我有用:)

如果您使用的是 Nginx,请让它为媒体文件提供服务

对于示例

转到 nginx/sites-available 并添加这个

location /media/ { root */home/myprojectdir/myproject*; } 

我遇到了与 DEBUG=False 相同的问题。我通过像这样在服务器块中配置 Nginx 媒体位置来解决它

location /media/ {
    root FULL_PATH_TO_APP; 
}

FULL_PATH_TO_APP 是我的 media 文件夹所在目录的完整路径。

在 Pythonanywhere 服务器中 只是 添加静态文件 url目录

URL
/静态/
/媒体/

目录路径

/home/taukir707/myblog/static

/home/taukir707/myblog/media

这是最好的解决方案。将媒体文件夹保存在静态文件夹中。并在

中使用此代码

Settings.py

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
if(DEBUG==True):
    STATIC_URL = '/static/'
    MEDIA_URL = '/static/media/'
    STATICFILES_DIRS=[
         os.path.join(BASE_DIR,'static')
    ]
    STATIC_ROOT='/home/username/websitedomain/static'
    MEDIA_ROOT='/home/username/websitedomain/static/media'
else:
    STATIC_URL = '/static/'
    MEDIA_URL='static/media/'
    STATIC_ROOT=os.path.join(BASE_DIR,'static')
    MEDIA_ROOT=os.path.join(BASE_DIR,'static/media/')

提供媒体文件的简单文章在这里您可以阅读它,只有两个简单的步骤: Article Link

感谢社区!

这对我帮助很大

settings.py

STATIC_URL = '/static/'


STATIC_ROOT = os.path.join(BASE_DIR, "static/")


MEDIA_URL =  '/media/'


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


STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'


INSTALLED_APPS = [
 
    'django.contrib.staticfiles',

    'whitenoise.runserver_nostatic',

]

在 url.py 中导入 URL 并提供静态和媒体文件 URL

from django.views.static import serve

from django.conf.urls import url