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 time模块用法实例详解
Sep 11 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
快速了解python leveldb
Jan 18 Python
Python中property属性实例解析
Feb 10 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
python 实现屏幕录制示例
Dec 23 Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
Python实现UDP程序通信过程图解
May 15 Python
python实现单机五子棋
Aug 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
php下将XML转换为数组
2010/01/01 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php之curl设置超时实例
2014/11/03 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
用于table内容排序
2006/07/21 Javascript
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
jQuery Ajax 全解析
2009/02/08 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
Vue2几种常见开局方式详解
2017/09/09 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
vue头部导航动态点击处理方法
2018/11/02 Javascript
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
Python实现疫情地图可视化
2021/02/05 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
优秀生推荐信范文
2013/11/28 职场文书
2014年标准化工作总结
2014/12/17 职场文书
学校捐款活动总结
2015/05/09 职场文书
在校学生证明格式
2015/06/24 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL