V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Nick2VIPUser
V2EX  ›  Python

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

  •  
  •   Nick2VIPUser ·
    nickliqian · 2018-02-05 11:03:07 +08:00 · 3466 次点击
    这是一个创建于 2483 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    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",)
    
    
    6 条回复    2018-02-07 08:53:02 +08:00
    myyou
        1
    myyou  
       2018-02-05 11:08:27 +08:00   ❤️ 2
    ```
    # Django media
    location /media {
    alias /var/www/NickBlog/static/media; # your Django project's media files - amend as required
    }


    ```
    改为这样试试
    misaka19000
        2
    misaka19000  
       2018-02-05 11:18:34 +08:00   ❤️ 1
    为什么不直接把图片上传到 CDN 上面呢
    zhengxiaowai
        3
    zhengxiaowai  
       2018-02-05 12:44:19 +08:00   ❤️ 1
    Nick2VIPUser
        4
    Nick2VIPUser  
    OP
       2018-02-05 14:34:14 +08:00
    @myyou
    @misaka19000
    @zhengxiaowai
    正在研究诸位给的答案,非常感谢!!!
    luhuisicnu
        5
    luhuisicnu  
       2018-02-06 10:14:02 +08:00
    MEDIA_ROOT 直接改成 nginx 配置的目录,给 web 进程读写权限,就直接存进去了。
    Nick2VIPUser
        6
    Nick2VIPUser  
    OP
       2018-02-07 08:53:02 +08:00 via iPhone
    @luhuisicnu 后来我尝试这个方法,成功了!非常感谢大佬!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   928 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:35 · PVG 05:35 · LAX 13:35 · JFK 16:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.