我正在使用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}}
答案 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);
}