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 远程统计文件代码分享
May 14 Python
Python reduce()函数的用法小结
Nov 15 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
python调用摄像头显示图像的实例
Aug 03 Python
python调用自定义函数的实例操作
Jun 26 Python
Python实现微信好友的数据分析
Dec 16 Python
python脚本和网页有何区别
Jul 02 Python
通过实例简单了解python yield使用方法
Aug 06 Python
Python configparser模块应用过程解析
Aug 14 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
python 生成正态分布数据,并绘图和解析
Dec 21 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/16 PHP
php学习之运算符相关概念
2011/06/09 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
javascript实现下拉菜单效果
2021/02/09 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
给实习单位的感谢信
2014/02/01 职场文书
《故乡》教学反思
2014/04/10 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
大学生实习证明范本
2014/09/19 职场文书
员工工作能力评语
2014/12/31 职场文书
写给老师的感谢信
2015/01/20 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
安全生产培训心得体会
2016/01/18 职场文书
python tkinter模块的简单使用
2021/04/07 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang