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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
pandas的qcut()方法详解
Jul 06 Python
python修改字典键(key)的方法
Aug 05 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 Python
python二维键值数组生成转json的例子
Dec 06 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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学习 运算符与运算符优先级
2008/06/15 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
vue组件间通信子与父详解(二)
2017/11/07 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
python实现转圈打印矩阵
2019/03/02 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
python的pip有什么用
2020/06/17 Python
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
电气工程师岗位职责
2014/01/01 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
安全承诺书范文
2014/03/26 职场文书
Echarts如何重新渲染实例详解
2022/05/30 Javascript
Python find()、rfind()方法及作用
2022/12/24 Python