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基于win32ui模块创建弹出式菜单示例
May 09 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
python处理document文档保留原样式
Sep 23 Python
django 读取图片到页面实例
Mar 27 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
python实现网络五子棋
Apr 11 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 Python
Django REST framework 限流功能的使用
Jun 24 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 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
详解:――如何将图片储存在数据库里
2006/12/05 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
中止javascript执行的方法
2014/02/14 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
Java分治归并排序算法实例详解
2017/12/12 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
中文系学生自荐信范文
2013/11/13 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
阿德的梦教学反思
2014/02/06 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
MySQL读取JSON转换的方式
2022/03/18 MySQL
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis