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错误处理详解
Sep 28 Python
零基础写python爬虫之神器正则表达式
Nov 06 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python+django+sql学生信息管理后台开发
Jan 11 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
详解python解压压缩包的五种方法
Jul 05 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
python 两个数据库postgresql对比
Oct 21 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
python 获取字典键值对的实现
Nov 12 Python
Django contrib auth authenticate函数源码解析
Nov 12 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中文件下载功能实现超详细流程分析
2012/06/13 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
Vue不能观察到数组length的变化
2018/06/08 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
js实现select下拉框选择
2020/01/11 Javascript
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
python基础教程之常用运算符
2014/08/29 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
证券期货行业个人的自我评价
2013/12/26 职场文书
工作检讨书怎么写
2015/01/23 职场文书
初一军训感言
2015/08/01 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android