簡體   English   中英

如何在Django App Nginx服務器中提供媒體文件?

[英]how to serve media files in django app nginx server?

我正在使用nginx,gunicorn,postgresql在生產模式(debug = false)下測試django應用程序。

雖然我可以渲染靜態文件,但無法訪問存儲在“ media”文件夾中的文件。

在我的settings.py中,設置了以下變量:

 MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
 # also tried another combination: MEDIA_ROOT = 'media'

同樣在urls.py中,MEDIA_ROOT設置如下:

 urlpatterns = [
   path('admin/', admin.site.urls),
   path('venter/', include('appname.urls')),
 ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在我的/ etc / nginx / sites-available /文件中,我有以下設置:

server {
listen 80;
server_name website.com www.website.com ;

location = /favicon.ico { access_log off; log_not_found off; }
location /static {
    root /home/a/btawebsite;
}

location /media/ {
    root /home/a/btawebsite;
}

location / {
    include proxy_params;
    proxy_pass http://unix:/home/a/myproject.sock;
}
}

但是,當按如下方式渲染存儲在我的django數據庫中的xlsx文件時,將引發我未找到錯誤。

{{file.output_file.url}}

我嘗試了呈現媒體文件所需的所有配置組合,但無法實現結果。 謝謝。

更新:在settings.py中進行以下更改

 MEDIA_URL = '/'
 MEDIA_ROOT = 'media'

如果django設置中的所有內容都已正確配置,則只需在nginx conf中添加以下內容:

location /media  {
   alias /home/user/django_app/media; #(locaion of your media folder)                                                                                       
}

首先,從您的urls.py中刪除+static() 對於生產而言,這不正確,僅對發展而言。

在您的nginx配置中, location = /media/僅適用於完全匹配,不適用於以/media/開頭的位置。 刪除=

在您的settings.py中這樣寫

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')  # root for media files

MEDIA_URL = "/media/"

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

FORCE_SERVE_STATIC = True
DEBUG=False

在您的urls.py中這樣更改

if settings.DEBUG:
    urlpatterns += static(
        settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
elif getattr(settings, 'FORCE_SERVE_STATIC', False):
    settings.DEBUG = True
    urlpatterns += static(
        settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(
        settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    settings.DEBUG = False

在您的nginx.conf文件中,將根目錄更改為您的媒體文件夾

location /media/  {
            root /home/nazmi/workspace/portal/media/ (url for your media folder);                                                                                       
                }

暫無
暫無

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

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