【问题标题】:django doesn't serve user-uploaded files in productiondjango 不在生产环境中提供用户上传的文件
【发布时间】:2018-02-27 15:10:54
【问题描述】:

我用 django 部署了一个网站。它提供所有静态文件,但不提供用户上传的文件。 这是我的settings.pyurls.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG = False

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticroot')
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

MEDIA_URL = '/files/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploaded_files')

还有urls.py

urlpatterns = [
url(r'^admin/', admin.site.urls),    
url(r'^$', Index.as_view(), name='index'),
] 

在页面中,它会正确打印用户上传的文件地址,但是当我单击链接时不显示它们,它会显示 404 页面。 我使用从 nginx 存储库中获取的最新版本的 nginx。版本 1.12。 它与 django 或 webserver(nginx + gunicorn)有关吗?我该如何解决这个问题?

更新 当我将MEDIA_URLDEBUG 更改为True 时,它​​第一次可以工作并提供用户上传的文件,但是如果我刷新页面,它就不起作用了!有什么问题??

【问题讨论】:

    标签: django nginx django-templates gunicorn django-file-upload


    【解决方案1】:

    您必须在 urls.py

    中定义
    from django.conf.urls import include, url
    from django.conf.urls.static import static
    from django.conf import settings
    urlpatterns = [
               url(r'^admin/', admin.site.urls),    
               url(r'^$', Index.as_view(), name='index'),
             ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    【讨论】:

      【解决方案2】:

      那是因为 django 在生产中不提供静态和媒体文件。这就是为什么当你使 DEBUG = True 时它起作用的原因,

      您需要做的是在您的站点的 nginx 配置中为媒体文件设置一个别名,在您的服务器块中,就像静态文件一样,如下所示:

          location /files/ {
          autoindex on;
          alias /home/your/project/uploaded_files/;
          }
      

      另外,之后别忘了重启你的 nginx。

      【讨论】:

        猜你喜欢
        • 2013-03-20
        • 1970-01-01
        • 2021-03-13
        • 1970-01-01
        • 2014-05-15
        • 1970-01-01
        • 2017-08-18
        • 2018-09-25
        • 2013-07-28
        相关资源
        最近更新 更多