Reference:http://blog.csdn.net/permike/article/details/52355095javascript
在网站开发阶段,对于静态资源文件好比JS,CSS等文件都是未通过压缩合并处理的,这对于访问量巨大的网站来讲不只浪费带宽,并且也会影响网站的访问速度。django-compressor的做用就是将静态文件压缩合并成一个文件,不只减小了网站的请求次数,还能节省网络带宽。php
本文分为两部分,第一部分介绍settings文件相关配置对静态文件的影响,而后再讨论Compressor的如何使用。若是你对setting文件很是了解不妨直接从第二部分开始阅读。css
早期的django处理静态资源要比较啰嗦,还要配置urlpatterns,不过自从django1.6开始加入了django.contrib.staticfiles
这个内置app后,开发环境下处理静态资源就方便不少。django.contrib.staticfiles
是django的内置(build-in)app,用于处理js、css、images等静态资源。首先确保这个app已经包含在INSTALLED_APPS
中,django1.6及以上版本是默认包含该app在其中的。java
STATIC_URL = '/static/'
STATIC_URL是客户端访问静态资源的根路径,好比:模版中定义的资源路径是:python
{% load staticfiles %}
<script src="{% static "js/blog.js" %}"></script>
最终渲染后的效果是:jquery
<script src="/static/js/blog.js"></script>
默认django会从每一个app目录的static子目录下查找静态文件,所以一般状况下你都是将相关静态文件放在各自的app/static目录下。Django怎么知道从app/static目录查找静态文件呢?原来django有个默认配置项STATICFILES_FINDERS
,默认值:nginx
("django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder")
AppDirectoriesFinder
模块就是负责在app/static目录下找静态文件的。至于FileSystemFinder咱们稍后介绍。git
像jQuery,bootstrap等公用的静态资源文件在不少个app中都会共用到,若是是放在某个app中显得不符Python哲学,所以django提供了一个配置能够指定任意目录来存放这些公用的资源文件。配置参数是:STATICFILES_DIRS
,好比:github
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"), '/var/www/static/', )
这意味着静态文件能够放在磁盘的任何一个位置(只要有权限访问)如今应该明白FileSystemFinder的做用了吧。就是用来查找定义在STATICFILES_DIRS中的静态文件的。apache
上面的配置就是在开发环境下Django对静态资源的处理过程,那么在生产环境下是怎么处理的呢?若是仍是这样由django本身来处理,那么累死Django了,对于静态资源直接由Nginx这样的代理去处理就行,并且Nginx处理这些非逻辑的资源性能也很是高。因而Django提供了一个很是方便的静态资源管理命令django.contrib.staticfiles
将系统要用的资源文件从不一样目录收集到统一的目录中去,而后在Nginx的配置中指定这些静态资源的位置便可。
收集这些静态文件须要先指定存放这些静态资源的目录:STATIC_ROOT
STATIC_ROOT="/var/www/foofish.net/static/"
运行collectstatic管理命令
python manage.py collectstatic
运行该命令,全部静态资源都将拷贝到STATIC_ROOT指定的目录中。
在Nginx的配置文件中指定凡是来自/static/
路径的请求直接访问STATIC_ROOT
。
location /static { alias /var/www/foofish.net/static/; # your Django project's static files }
django-compressor 的安装配置很是简单
pip install django_compressor
COMPRESS_ENABLED = True INSTALLED_APPS = ( # other apps "compressor", ) STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'django.contrib.staticfiles.finders.FileSystemFinder', 'compressor.finders.CompressorFinder',)
Django-Compressor开启与否取决于DEBUG参数,默认是COMPRESS_ENABLED与DEBUG的值相反。由于Django-Compressor的功能自己是用在生产环境下项目发布前对静态文件压缩处理的。所以想在开发阶段(DEBUG=True)的时候作测试使用,须要手动设置COMPRESS_ENABLED=True
在模板文件中添加模板标签 {% load compress %}
{% load compress %}
#处理css
{% compress css %}
<link href="{% static "css/bootstrap.min.css" %}" rel="stylesheet"> <link href="{% static "css/blog-home.css" %}" rel="stylesheet"> <link href="{% static "css/github.css" %}" rel="stylesheet"> {% endcompress %} #处理js {% compress js %} <script src="{% static "js/jquery-1.10.2.js" %}"></script> <script src="{% static "js/bootstrap.js" %}"></script> <script src="{% static "js/blog.js" %}"></script> {% endcompress %}
执行命令:python manage.py compress
,最终文件将合并成:
<link rel="stylesheet" href="/static/CACHE/css/f18b10165eed.css" type="text/css"> <script type="text/javascript" src="/static/CACHE/js/9d1f64ba50fc.js"></script>
f18b10165eed.css
、9d1f64ba50fc.js
这两文件在STATIC_ROOT
目录下面。
每次修改了js、css文件后,都须要从新加载最新的文件到STATIC_ROOT
目录下去,所以须要从新运行命令:
python manage.py collectstatic python manage.py compress