Django用异常提供静态文件

时间:2013-12-09 11:48:53

标签: django url static

在我的生产环境中,我有Nginx为我的Django应用程序提供静态文件,但在开发时我让Django这样做。

我需要让Nginx提供所有静态文件,但在某个子目录中。所以,Django方面,我需要拦截该目录并以不同方式对待它。

如何让Django dev服务器拦截对/static/*的所有调用,而不是/static/myspecialfiles/*´ and hence write a url route to handle the GET calls to said / static / myspecialfiles / *'的调用?

1 个答案:

答案 0 :(得分:0)

你需要在两个方面解决这个问题,Django和nginx。

对于Django,由于运行本地设置(当DEBUG=True)已经自动提供来自STATIC_ROOT的静态内容,只需为您的特殊文件添加URL conf:

# in urls.py
url(r'^/static/specialfiles/', SpecialView.as_view(), name='special'),

然后,在您的nginx conf中,确保忽略该路径,以便它实际到达Django:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8000;
    }

    location /static/specialfiles/ {
        proxy_pass http://localhost:8000;
    }

    location /static/ {
        alias /home/ubuntu/dev/example/static/;
    }
}

由于位置是按顺序解析的,因此您的特殊文件将在通用静态块之前到达django块。

但实际上,您最好将您的特殊文件移到其他地方。