Django压缩静态文件的实现方法详析


Posted in Python onAugust 26, 2018

django静态文件配置原理

静态文件配置就是为了让用户请求时django服务器能找到静态文件返回。

首先要理解几个概念:

  • 媒体文件:用户上传的文件
  • 静态文件:css,js,image等
  • 开发环境:使用django内置服务器处理静态文件
  • 生产环境:使用apache2/nginx服务器处理静态文件映射

所以在配置时要分清楚开发环境还是生产环境,这个后面会详细介绍。

下面先介绍一下服务器查找静态文件的原理,这样我们才能更好的配置。

引言

在网站开发阶段,对于静态资源文件比如JS,CSS等文件都是未经过压缩合并处理的,这对于访问量巨大的网站来说不仅浪费带宽,而且也会影响网站的访问速度。

django-compressor可以把js/css等静态文件压缩,这样不仅有利于减少网站的请求次数,还能节省网络带宽。

而这篇文章即是介绍使用如何使用Python的Django框架中的压缩组件django-compressor!

下面就介绍如何在Django中集成django-compressor!

安装django-compressor

安装很简单,pip安装下就可以了:

$ pip install django-compressor

然后在'setting'的INSTALLED_APPS中添加

INSTALLED_APPS = [
 #others
 'compressor'
]

setting配置

首先确保django.contrib.staticfiles已经包含在INSTALLED_APPS中,django1.6及以上版本是默认包含该app在其中的.

指定STATIC_URL

STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic')
# STATIC_URL是客户端访问静态资源的根路径配置 
STATIC_URL = '/static/'
STATICFILES = os.path.join(BASE_DIR, 'static')

配置STATICFILES_FINDERS

默认django会从每个app目录的static子目录下查找静态文件,因此通常情况下你都是将相关静态文件放在各自的app/static目录下。Django怎么知道从app/static目录查找静态文件呢?Django有个默认配置项STATICFILES_FINDERS:

STATICFILES_FINDERS = (
 'django.contrib.staticfiles.finders.FileSystemFinder',
 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
 #other
 'compressor.finders.CompressorFinder',
)

添加django-compressor配置:

Django-Compressor开启与否取决于DEBUG参数,默认是COMPRESS_ENABLED 与 DEBUG 的值相反。因为 Django-Compressor 的功能本身是用在生产环境下项目发布前对静态文件压缩处理的。因此想在开发阶段 (DEBUG=True) 的时候做测试使用,需要手动设置 COMPRESS_ENABLED=True

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_CSS_FILTERS = [
 #creates absolute urls from relative ones
 'compressor.filters.css_default.CssAbsoluteFilter',
 #css minimizer
 'compressor.filters.cssmin.CSSMinFilter'
]
COMPRESS_JS_FILTERS = [
 'compressor.filters.jsmin.JSMinFilter'
]

使用

使用也很简单,模板文件中添加模板标签 <font color="red">{% load compress %}</font>

下面分别是css和js的使用方式

{% load compress %}
{% compress css %}
<link rel='stylesheet' href='{% static 'blog/css/style.css' %}' type='text/css'/>
{% endcompress %}
{% compress js %}
<script type="text/javascript" src="{% static 'blog/js/jquery-3.1.1.js' %}"></script>
{% endcompress %}

接着先运行命令:

$ python manage.py collectstatic --noinput

所有静态资源都将拷贝到STATIC_ROOT指定的目录中。

然后运行命令:

$ python manage.py compress --force

这样就会把压缩后的文件放在 <font color="red">STATIC_ROOT</font> 目录下面,大功告成!!

每次修改了js、css文件后,都需要重新加载最新的文件到 <font color="red">STATIC_ROOT</font> 目录下去,因此需要重新运行命令:

$ python manage.py collectstatic --noinput
$ python manage.py compress --force

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python计算已经过去多少个周末的方法
Jul 25 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
python多线程方式执行多个bat代码
Jun 07 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
tensorflow如何批量读取图片
Aug 29 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
python pygame实现挡板弹球游戏
Nov 25 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
python制作抽奖程序代码详解
Jan 15 Python
Python实现简单的猜单词
Jun 15 Python
Python实现将Excel转换成xml的方法示例
Aug 25 #Python
Python实现的简单计算器功能详解
Aug 25 #Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
Aug 25 #Python
Python使用matplotlib绘制三维图形示例
Aug 25 #Python
Python实现的括号匹配判断功能示例
Aug 25 #Python
Django中使用Celery的教程详解
Aug 24 #Python
python tornado微信开发入门代码
Aug 24 #Python
You might like
解析php中array_merge与array+array的区别
2013/06/21 PHP
PHP实现事件机制的方法
2015/07/10 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
Python连接DB2数据库
2016/08/27 Python
python常见排序算法基础教程
2017/04/13 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python 深度学习中的4种激活函数
2020/09/18 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
个人简历自我评价八例
2013/10/31 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
董事长助理工作职责
2014/06/08 职场文书
毕业设计致谢词
2015/05/14 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android