首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

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

  •  
  •   Nick2VIPUser · 165 天前 · 1335 次点击
    这是一个创建于 165 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    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
        1
    myyou   165 天前   ♥ 2
    ```
    # Django media
    location /media {
    alias /var/www/NickBlog/static/media; # your Django project's media files - amend as required
    }


    ```
    改为这样试试
        2
    misaka19000   165 天前   ♥ 1
    为什么不直接把图片上传到 CDN 上面呢
        3
    zhengxiaowai   165 天前   ♥ 1
        4
    Nick2VIPUser   165 天前
    @myyou
    @misaka19000
    @zhengxiaowai
    正在研究诸位给的答案,非常感谢!!!
        5
    luhuisicnu   164 天前
    MEDIA_ROOT 直接改成 nginx 配置的目录,给 web 进程读写权限,就直接存进去了。
        6
    Nick2VIPUser   163 天前 via iPhone
    @luhuisicnu 后来我尝试这个方法,成功了!非常感谢大佬!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   1808 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 14:03 · PVG 22:03 · LAX 07:03 · JFK 10:03
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1