python pipeline框架_介绍Python的Django框架中的静态资源管理器django-pipeline
django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 django-staticfiles 的collectstatic 命令,在开发、部署环境下切换非常方便。
写 codinn.com 代码的时候,静态资源管理方面遇到了一些烦人的事情:
为了加速页面加载速度,浏览器会缓存静态文件,静态资源更新后,浏览器很可能从缓存提取过期的静态文件
自己写的 CSS/JS 要手工 minify,非常麻烦
零碎的 CSS/JS 小文件太多
CSS/JS minified 之后,开发环境下调试起来很不方便
django-pipeline 通过静态资源版本化、自动 minify、分组合并 CSS/JS 文件、兼容 django-staticfiles URL 规则以及collectstatic 命令。
slimit / jsmin
图个省心,我通常使用 jsmin/cssmin 这两个 Python minifier:
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.jsmin.JSMinCompressor'
PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.cssmin.CssminCompressor'
但是 jsmin 年久失修,实际使用结论是:jsmin 是有 bug 的,jQuery 开发库用 jsmin minify 后被破坏,压根无法正常工作。但是 jQuery 官方 minify 之后的 JS 文件再用 jsmin minify 之后却没有问题。
虽然有规避方案,但始终对 jsmin 不放心,索性改用 slimit,暂时还没发现 JS 被破坏的问题。
django-pipeline 未提供对 slimit 的支持,不过 pipeline 的扩展性还不错,写一个 slimit 扩展也是分钟的事情:
from __future__ import absolute_import
from pipeline.compilers import CompilerBase
class SlimItCompiler(CompilerBase):
"""
JS compressor based on the Python library slimit
(http://pypi.python.org/pypi/slimit/).
"""
def compress_js(self, js):
from slimit import minify
return minify(js)
将以上代码保存成 slimit 文件,扔在项目中的某个包目录下即可,再修改 settings:
PIPELINE_JS_COMPRESSOR = 'lib.slimit.SlimItCompiler'
UnicodeDecodeError: 'ascii' codec can't decode byte 问题
启用 django-pipeline 后,执行 manage.py collectstatic 如果碰到下面的错误提示:
File ".../ENV/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 226, in post_process
content = pattern.sub(converter, content)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
八成是因为 CSS 文件中含有中文或其它非拉丁文字。我在使用 @font-face 图标文字时碰到了这个问题,这是 django staticfiles 包的一个 bug,解决方法是修改 /django/contrib/staticfiles/storage.py 文件,把出错的那行代码:
content = original_file.read()
替换成:
content = original_file.read().decode('utf-8')
用这个方法的前提是:你的 CSS 文件必须保证 utf-8 编码,否则依然会出错。
PS,给 Django 项目提交了一个 bug 报告:https://code.djangoproject.com/ticket/18430
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
python pipeline框架_介绍Python的Django框架中的静态资源管理器django-pipeline相关推荐
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python管理系统设计_基于Python和Django框架的物联网智能设备管理系统的设计与实现
杨武帅 万启元 桑贤伯 摘 要:针对目前日益增多的智能设备提出了兼容性好,稳定性高,易于管理的管理系统的设计方法.在服务器端使用Python和Django框架进行与设备的数据交互及设备管理网站的构架, ...
- python 类库教程_介绍15个好用到哭的python库
Python视频教程栏目介绍15个好用的python库 推荐(免费):Python视频教程 为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正 ...
- pytest测试框架_聊聊 Python 的单元测试框架(三):最火的 pytest
本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 一.介绍 本篇文章是<聊聊 Python 的单元测试框架>的第三篇,前两篇分别介绍了标准库 unittes ...
- python return用法_遗传算法(Python) #4 DEAP框架入门
1. DEAP框架简介 DEAP(Distributed Evolutionary Algorithms in Python)是一个热门的Python进化算法框架,我们可以用这个框架在Python内实 ...
- python测试驱动开发_使用Python进行测试驱动开发的简单介绍
python测试驱动开发 by Dmitry Rastorguev 德米特里·拉斯托格夫(Dmitry Rastorguev) 使用Python进行测试驱动开发的简单介绍 (A simple intr ...
- python 新式类_【Python】Python 新式类介绍
我们使用 Python 开发时, 会遇到 class A 和 class A(object) 的写法, 这在 Python2 里是有概念上和功能上的区别, 即经典类(旧式类)与新式类的区别, 英文上分 ...
- python的六个类型_介绍Python中6个序列的内置类型
原标题:介绍Python中6个序列的内置类型 1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xran ...
最新文章
- [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)
- REM+SVG Sprite,web app案例
- 初学ctypes:打开进程并返回相关信息
- 写一个简版 asp.net core
- [Git GitHub] Windows下安装git,从0开始搭建git环境(配置环境变量+设置git-ssh key...配置)(超全版)
- Tmk吃汤饭(模拟)
- 企业搜索引擎(Enterprise Search Engine)的2007中重要的功能
- CBNetV2论文的译读笔记
- Windows Server 2008 Server Core模式
- GDB 调试命令讲解 2-转
- 对香草冰淇淋过敏的汽车
- java中的轻重量级组件_java Swing AWT 轻量级组建 和 重量级组件
- mysql的驱动jar包下载
- 十分钟智商运动 李永乐 第2章 奇妙的物理
- RK3568-ANDROID11-4G-EC20-驱动篇(移远模块)
- 债券的即期收益率,到期收益率,远期收益率有什么区别?
- Battle接口测试训练系统的1分钟快速说明
- visual studio code 简介
- 新能源汽车补贴监管升级,“信息/网络安全+OTA”勒紧“紧箍咒”
- 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用
热门文章
- 如何确定CPU是大端字节序还是小端字节序?
- python(numpy,pandas3)——numpy索引
- Javaweb基础——Servlet
- 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】
- python自动化测试平台github_GitHub - DangKaio/FXTest: 接口自动化测试平台——python+flask版,支持http协议...
- zabbix 安装_Zabbix的WEB安装与配置
- Oracle 原理:逻辑备份和恢复
- MySQL / schema的概念
- Linux / TCPIP / 判断 client 已经关闭的方法
- 32 位和 64 位 OS 下的各种数据类型的大小