前言
静态文件处理是每个网站都必备的步骤, django的静态文件处理一般都遵循固定的套路, 这里分debug模式和非debug模式来说
通用配置
简单说下, settings.py
中一般会针对static有两个配置:
STATIC_URL
- 可以理解为通过url访问static文件的路径
STATIC_ROOT
- 可以理解为你打算在服务器上存储static文件的路径(通过 python manage.py collectstatic命令)
除此之外, 在settings.py
同级的urls.py
内还需要把STATIC_URL
和django的url连接起来, 通常:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
很简单, 就这么三步.
但这只是适用于常规配置.
怎么个常规法呢, 就是说你只有一个debug=True的环境(开发), 和一个debug=False的环境(生产)
之所以提这个debug, 是因为你应该了解, 把静态文件丢给web server一起处理不是个明智的决定. 通常来说在开发的时候我们可以图方便, 但是上了生产环境, 我们会把静态文件都丢给诸如nginx这样的反向代理来处理, 当然也未必是nginx, 如果你采用了前后端分离, 用k8s分开部署, 也可以在ingress中为不同路径配置请求的服务.
如果认真看了上述的staticfiles_urlpatterns
的函数其实也不难发现, django对此的默认配置其实就是只在debug=True的情况下允许访问静态资源, 在False时干脆关掉了这个url path.
这样有点粗暴, 现实开发中也许我们会需要一个staging环境做预发布环境, 也许我们需要在这个环境上书写api文档, 这就意味着你在这个环境上也需要适当访问一些静态资源.
因此就要对上述函数做写改动, 让其在特定环境下也开放static的访问
重写url
也很简单, 只要看一下原函数是怎么写的, 把相应部分改掉