关于django+uwsgi+nginx出现静态资源404问题合集
问题:
1.Django 直接运⾏,没问题,静态资源等都正常;
2.Django + uwsgi运⾏,页⾯正常,静态资源不到了;
分析:
若你使⽤了前⽂所述的 ib.staticfiles, runserver 会在 DEBUG 为 True 时⾃动处理。若你未在 INSTALLED_APPS 中包含 ib.staticfiles,你仍能⼿动通过 django.views.static.serve() 为静态⽂件提供服务。
这不适合⽣产环境!常见的部署策略请参考 部署静态⽂件。
例如,若 STATIC_URL 为 /static/,STATIC_ROOT为你的静态资源存放路径,你能通过添加以下代码⽚段⾄ urls.py 完成⽬的:
f.urls.static import static
urlpatterns =[
# ... the rest of your URLconf goes here ...
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
结论
1. ⽤django的manager直接运⾏,django⾃⼰知道静态资源在哪,可以到,因此正常执⾏;
nginx部署前端项目2. ⽤uwsgi运⾏时,uwsgi⽆法到静态资源⽬录,⽆法处理;
3. 我们的django通过wsgi协议运⾏时不会再主动帮你提供提供静态资源寻服务了,因此咱们需要⾃⼰在django的路由⾥加上匹配静
态资源url的⼀段,⽤来匹配静态资源url并处理它;
解决
解决⽅法有三种:
1. 通过uswgi处理静态资源,⾃⾏搜索uwsgi static即可到配置⽅法;
2. ⾃⼰通过django路由进⾏url匹配,进⾏处理静态资源;
注意:官⽅⽂档说了,解决办法2不适⽤于⽣产环境!因为要DEBUG=True才能⽣效!
3. 在配置NGINX时,在server配置⾥配置静态资源路径即可;
总之,解决⽅案就两种,要么交给web服务器解决,如uwsgi或NGINX,要么在debug模式下交给django解决,django不⽀持在
debug=false时处理静态资源,我觉得这种设计是基于这种设计理念:
1. django只专⼼做⽹站的逻辑处理部分;
2. web请求处理应该交给专门的web服务器处理;
3. 对于静态的不可变不需要逻辑处理的资源都应交给web服务器处理;
4. django⾃带的web服务器只是为了调试应⽤;
另外:
STATICFILES_DIRS 列表中的⽬录是开发时创建的静态⽬录。
STATIC_ROOT 是Django框架放到⽣产环境中的唯⼀的⼀个静态⽬录 
⽽当你设置DEBUG=False时,就必须在Django框架前端部署nginx或者其他web服务器来提供静态访问⼊⼝

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。