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 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
python绘制多个曲线的折线图
Mar 23 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
python Gabor滤波器讲解
Oct 26 Python
Python基于template实现字符串替换
Nov 27 Python
python 调整图片亮度的示例
Dec 03 Python
Django实现简单的分页功能
Feb 22 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 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
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
jquery中动态效果小结
2010/12/16 Javascript
再论Javascript的类继承
2011/03/05 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
解读Python中degrees()方法的使用
2015/05/18 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
python3将变量输入的简单实例
2020/08/19 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
中层干部岗位职责
2013/12/18 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
医德医风自我评价
2014/09/19 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
行政复议答复书
2015/07/01 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL