[请教] django 项目部署后通过 admin 上传的图片的路径问题

2018-02-05 11:03:07 +08:00
 Nick2VIPUser

问题

  1. 使用 nginx 和 uwsgi 部署 django 项目,能够正常访问各个页面

  2. 目标功能是进入 admin 页面上传图片,即时显示在首页上

  3. 目前通过 admin 上传图片后,图片会存放在 django 项目的 static/media/upload 目录下,ng 的静态文件目录下没有

  4. 由于设置了 nginx,所以现在首页无法显示图片,因为图片在 /var/www/static/projectName 目录下没有

  5. 网上找到一种 将图片目录重定向到 nginx 的的静态文件目录 的方案,可惜没有解决

  6. 这里请教一下各位老哥,应该如何配置可以实现在 admin 中上传图片后,可以直接存在 /var/www/static/projectName 目录下(也就是 ng 的静态文件目录)

非常感谢,希望大家能不吝吐槽和赐教!!!

代码

1. 以下是 ng 的配置文件:

upstream django {
    server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
server {
    listen      80;
    charset     utf-8;
    client_max_body_size 75M; 

    location /media  {
        alias /var/www/NickBlog/static;
    }

    location /static {
        alias /var/www/NickBlog/static;
    }

    location / {
        uwsgi_pass  django;
        include     uwsgi_params; 
    }
}

2. uwsgi 的配置文件

[uwsgi]
# Django-related settings
socket = :8000
# the base directory (full path)
chdir = /root/NickBlog/
wsgi-file = /NickBlog/wsgi.py
# Django s wsgi file
module =NickBlog.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum = true
pidfile=uwsgi.pid
daemonize=uswgi.log

3. django settings 文件部分配置

STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/NickBlog/static/'

# 公共的 static 文件
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    os.path.join(BASE_DIR, "static/media"),
)

# upload floder
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')

STATICFILES_FINDERS = ("django.contrib.staticfiles.finders.FileSystemFinder",
                       "django.contrib.staticfiles.finders.AppDirectoriesFinder",)

3383 次点击
所在节点    Python
6 条回复
myyou
2018-02-05 11:08:27 +08:00
```
# Django media
location /media {
alias /var/www/NickBlog/static/media; # your Django project's media files - amend as required
}


```
改为这样试试
misaka19000
2018-02-05 11:18:34 +08:00
为什么不直接把图片上传到 CDN 上面呢
zhengxiaowai
2018-02-05 12:44:19 +08:00
Nick2VIPUser
2018-02-05 14:34:14 +08:00
@myyou
@misaka19000
@zhengxiaowai
正在研究诸位给的答案,非常感谢!!!
luhuisicnu
2018-02-06 10:14:02 +08:00
MEDIA_ROOT 直接改成 nginx 配置的目录,给 web 进程读写权限,就直接存进去了。
Nick2VIPUser
2018-02-07 08:53:02 +08:00
@luhuisicnu 后来我尝试这个方法,成功了!非常感谢大佬!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428511

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX