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相关推荐

  1. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  2. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  3. python管理系统设计_基于Python和Django框架的物联网智能设备管理系统的设计与实现

    杨武帅 万启元 桑贤伯 摘 要:针对目前日益增多的智能设备提出了兼容性好,稳定性高,易于管理的管理系统的设计方法.在服务器端使用Python和Django框架进行与设备的数据交互及设备管理网站的构架, ...

  4. python 类库教程_介绍15个好用到哭的python库

    Python视频教程栏目介绍15个好用的python库 推荐(免费):Python视频教程 为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正 ...

  5. pytest测试框架_聊聊 Python 的单元测试框架(三):最火的 pytest

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 一.介绍 本篇文章是<聊聊 Python 的单元测试框架>的第三篇,前两篇分别介绍了标准库 unittes ...

  6. python return用法_遗传算法(Python) #4 DEAP框架入门

    1. DEAP框架简介 DEAP(Distributed Evolutionary Algorithms in Python)是一个热门的Python进化算法框架,我们可以用这个框架在Python内实 ...

  7. python测试驱动开发_使用Python进行测试驱动开发的简单介绍

    python测试驱动开发 by Dmitry Rastorguev 德米特里·拉斯托格夫(Dmitry Rastorguev) 使用Python进行测试驱动开发的简单介绍 (A simple intr ...

  8. python 新式类_【Python】Python 新式类介绍

    我们使用 Python 开发时, 会遇到 class A 和 class A(object) 的写法, 这在 Python2 里是有概念上和功能上的区别, 即经典类(旧式类)与新式类的区别, 英文上分 ...

  9. python的六个类型_介绍Python中6个序列的内置类型

    原标题:介绍Python中6个序列的内置类型 1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xran ...

最新文章

  1. [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)
  2. REM+SVG Sprite,web app案例
  3. 初学ctypes:打开进程并返回相关信息
  4. 写一个简版 asp.net core
  5. [Git GitHub] Windows下安装git,从0开始搭建git环境(配置环境变量+设置git-ssh key...配置)(超全版)
  6. Tmk吃汤饭(模拟)
  7. 企业搜索引擎(Enterprise Search Engine)的2007中重要的功能
  8. CBNetV2论文的译读笔记
  9. Windows Server 2008 Server Core模式
  10. GDB 调试命令讲解 2-转
  11. 对香草冰淇淋过敏的汽车
  12. java中的轻重量级组件_java Swing AWT 轻量级组建 和 重量级组件
  13. mysql的驱动jar包下载
  14. 十分钟智商运动 李永乐 第2章 奇妙的物理
  15. RK3568-ANDROID11-4G-EC20-驱动篇(移远模块)
  16. 债券的即期收益率,到期收益率,远期收益率有什么区别?
  17. Battle接口测试训练系统的1分钟快速说明
  18. visual studio code 简介
  19. 新能源汽车补贴监管升级,“信息/网络安全+OTA”勒紧“紧箍咒”
  20. 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用

热门文章

  1. 如何确定CPU是大端字节序还是小端字节序?
  2. python(numpy,pandas3)——numpy索引
  3. Javaweb基础——Servlet
  4. 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】
  5. python自动化测试平台github_GitHub - DangKaio/FXTest: 接口自动化测试平台——python+flask版,支持http协议...
  6. zabbix 安装_Zabbix的WEB安装与配置
  7. Oracle 原理:逻辑备份和恢复
  8. MySQL / schema的概念
  9. Linux / TCPIP / 判断 client 已经关闭的方法
  10. 32 位和 64 位 OS 下的各种数据类型的大小