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实现将DOC文档转换为PDF的方法
Jul 25 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
详解Python3注释知识点
Feb 19 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
基于Django集成CAS实现流程详解
Nov 28 Python
Python 批量下载阴阳师网站壁纸
May 19 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
php常用字符函数实例小结
2016/12/29 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
分享一款基于jQuery的视频播放插件
2014/10/09 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python实现小世界网络生成
2019/11/21 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
“学雷锋活动月”总结
2014/03/09 职场文书
委托协议书范本
2014/04/22 职场文书
新党章的学习心得体会
2014/11/07 职场文书
奖励申请报告范文
2015/05/15 职场文书
宾馆安全管理制度
2015/08/06 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js