簡體   English   中英

django在生產環境中不提供用戶上傳的文件

[英]django doesn't serve user-uploaded files in production

我用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或Web服務器(nginx + gunicorn)有關嗎? 以及如何解決該問題?

更新當我將MEDIA_URLDEBUG更改為True時,它第一次可以工作並提供用戶上傳的文件,但是如果刷新頁面,那么它將無法工作! 有什么問題??

那是因為Django在生產中不提供靜態文件和媒體文件。 這就是為什么當您將DEBUG = True設置為有效時,

您需要做的是在您的站點的nginx配置中為服務器文件內的媒體文件設置別名,就像靜態文件一樣,如下所示:

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

另外,不要忘記稍后重新啟動Nginx。

您必須在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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM