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如何在终端里面显示一张图片
Aug 17 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
详解python 模拟豆瓣登录(豆瓣6.0)
Apr 18 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
Python request使用方法及问题总结
Apr 26 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
python 高阶函数简单介绍
Feb 19 Python
python 爬取京东指定商品评论并进行情感分析
May 27 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
python之基数排序的实现
Jul 26 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制作的意见反馈表源码
2007/03/11 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
vue实现记事本功能
2019/06/26 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python实现多线程抓取妹子图
2015/08/08 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python对象与引用的介绍
2019/01/24 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
win10安装python3.6的常见问题
2020/07/01 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
物理系毕业生自荐书范文
2014/02/22 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
农业项目合作意向书
2015/05/08 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL