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 网络编程起步(Socket发送消息)
Sep 06 Python
Python中3种内建数据结构:列表、元组和字典
Nov 30 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
详解Python迭代和迭代器
Mar 28 Python
Python实现进程同步和通信的方法
Jan 02 Python
TensorFlow实现创建分类器
Feb 06 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
Django框架 querySet功能解析
Sep 04 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 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中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
php文件缓存类汇总
2014/11/21 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
js分页工具实例
2015/01/28 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
详谈javascript异步编程
2016/02/21 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
Python itertools.product方法代码实例
2020/03/27 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
Python类成员继承重写的实现
2020/09/16 Python
python xlsxwriter模块的使用
2020/12/24 Python
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
编辑求职信样本
2013/12/16 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
高中教师考核方案
2014/05/18 职场文书
党员志愿者活动总结
2014/06/26 职场文书
主持人开场白台词
2015/05/29 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js