Django静态文件的处理
对于静态文件,Django主要是分成了两种,一是Media,另一个是Static.
- static 主要是css,js等等文件; 这些相对来说是提供给用户的,即这些文件(非严格讲)没有与用户进行互动,开发者产生这些文件为访问用户服务,用户只是单纯的享受应用服务。
- media: 用户与应用程序进行交互的文件(用户上传的文件等等)。
对于静态文件的处理,如果是生产环境,且用nginx部署,那一般由它的逻辑是一律由nginx来处理静态文件。在nginx中必须得配置static以及media路径。
location /media {
alias /home/haibo/study/myworks/dailyblog/media;
}
location /static {
alias /home/haibo/study/myworks/dailyblog/static;
}
STATIC
Django有几个变量管理static静态文件:
STATIC_ROOT
STATIC_URL
STATICFILES_DIRS
STATICFILES_STORAGE
STATICFILES_FINDERS
1、STATIC_URL
设定了 STATIC_URL后,可以根据URL地址访问,比如设置了“/static/”,域名为localhost,可以通过http://localhost/static/*访问。
2、STATIC_ROOT
通常我们在开发模式下,可以在我们所在的project下建立相应的app, 然后每个app下都建立相应的static文件夹。在开发模式下(Debug=True),Django将为我们自动查找这些静态文件(每个app)并在网页上显示出来。然而,在部署模式下,Django认为这些工作交由web服务器来运行会更有效率。
因此,在部署时,我们需要运行一下Python manage.py collectstatic 这个命令,这是必须的。这个命令之后,才会把每个app里的static目录下的文件copy到STATIC_ROOT这个文件夹下,这时候如果在部署模式下(Debug=False),网页中相关的,如: http://localhost/static/*** 的访问,将不会访问Django下各个App中的static,而是STATIC_ROOT中所指定的文件夹。
开发阶段,Django把/static映射到django.contrib.staticfiles这个App。staticfiles自动地从STATICFILES_DIRS、STATIC_ROOT以及各个App的static子目录里面搜索静态文件。一旦布署到开发环境上,settings.py不需要重新编写,只要在Apache的配置文件里面写好映射,/static将会被Apache处理。django.contrib.staticfiles虽然仍然存在,但因为不会接收到以/static/开始的路径,所以将不会产生作用。不必担心Django会使用处理速度变慢。另外,当settings.DEBUG is False的时候,staticfiles将自动关闭。
3、STATICFILES_DIRS
设置的额外的存储静态文件的路径。
Media
MEDIA_ROOT和MEDIA_URL与static的类似。
微信分享/微信扫码阅读