在我的生产环境中,我有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 / *'的调用?
答案 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块。
但实际上,您最好将您的特殊文件移到其他地方。