如何在Django App Nginx服务器中提供媒体文件?

时间:2019-07-23 10:43:53

标签: django nginx django-media

我正在使用nginx,gunicorn,postgresql在生产模式(debug = false)下测试django应用。

尽管我可以渲染静态文件,但无法访问存储在“ media”文件夹中的文件。

在我的settings.py中,设置了以下变量:

SFSafariViewController

还在urls.py中,MEDIA_ROOT设置如下:

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

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

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

但是,当按如下方式渲染存储在我的django数据库中的xlsx文件时,会引发我未找到错误。

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;
}
}

我尝试了呈现MEDIA文件所需的所有配置组合,但无法实现结果。 谢谢。

更新:要在settings.py

中进行以下更改
{{file.output_file.url}}

3 个答案:

答案 0 :(得分:1)

如果django设置中的所有内容均已正确配置,则只需在nginx conf中添加以下内容:

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

答案 1 :(得分:0)

首先,从您的urls.py中删除+static()。对于生产而言,这不正确,仅对开发而言是不正确的。

在您的nginx配置中,location = /media/仅适用于完全匹配 匹配,而不是以/media/开头的位置。删除=

答案 2 :(得分:0)

在您的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);                                                                                       
                }
相关问题