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中sets模块的用法实例
Sep 30 Python
python修改注册表终止360进程实例
Oct 13 Python
python读取word文档的方法
May 09 Python
Python使用win32com实现的模拟浏览器功能示例
Jul 13 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
python基于SMTP协议发送邮件
May 31 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python input函数使用实例解析
Nov 22 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 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
大师制作的中短波矿石收音机
2020/04/02 无线电
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python中取整的几种方法小结
2017/01/06 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
flask框架视图函数用法示例
2018/07/19 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
快速创建python 虚拟环境
2020/11/28 Python
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
单位人事专员介绍信
2014/01/11 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
同学聚会感言一句话
2015/07/30 职场文书
MySQL连接控制插件介绍
2021/09/25 MySQL
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL