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

Mis*_*tyD 5 media django static collectstatic

我目前有两种文件静态文件和媒体文件.静态文件包含我的css,js和其他静态内容.媒体文件包含用户上传的内容.静态文件夹就在媒体文件夹旁边.现在在我部署的计算机上.如果我设置DEBUG = False我的静态文件很好,但我的媒体内容永远不会显示.我收到一个404 not found错误.我的问题是当DEBUG = False时如何在生产环境中显示媒体内容.有了DEBUG = True,一切似乎都运行正常吗?我阅读了以下页面并尝试了这些内容.

1-Tried为静态媒体创建一个单独的文件夹,就像静态内容一样. 目前,我的静态内容由collectstatic命令管理.我在webfaction上使用apache.我有一个静态文件夹,static_content当我./manage.py collectstatic在静态文件夹中运行我的所有内容时被static_content调用复制到该文件夹.我尝试创建另一个名为的静态文件夹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' 
Run Code Online (Sandbox Code Playgroud)

这就是我的urls.py看起来像

admin.autodiscover()
urlpatterns = [
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

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

小智 9

在您的urls.py文件中:

添加这行

from django.views.static import serve
Run Code Online (Sandbox Code Playgroud)

在urlpatterns中添加这两个网址:

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

它对我有用:)

  • 但不应该在生产中使用:https://docs.djangoproject.com/en/2.2/ref/views/#serving-files-in-development (4认同)
  • 谢谢,你真的帮了我 (2认同)
  • 非常感谢您的回答。他在 4 个工作日内帮助了我。 (2认同)

Ala*_*air 7

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

MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'
Run Code Online (Sandbox Code Playgroud)

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

因为DEBUG = False,您必须配置Apache以提供媒体文件.


小智 7

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

对于示例

nginx/sites-available并添加这个

location /media/ { root */home/myprojectdir/myproject*; } 
Run Code Online (Sandbox Code Playgroud)


小智 6

我也遇到过同样的问题DEBUG=False。我通过在服务器块中配置 Nginx 媒体位置解决了这个问题,如下所示

location /media/ {
    root FULL_PATH_TO_APP; 
}
Run Code Online (Sandbox Code Playgroud)

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