文档章节

用django-pipeline为静态文件添加hash

duoduo3_69
 duoduo3_69
发布于 2014/10/31 19:02
字数 528
阅读 349
收藏 8

3 月,跳不动了?>>>

用django-pipeline为静态文件添加hash

为什么需要hash静态文件?

请看大公司里怎样开发和部署前端代码? 张云龙的答案。

这样,当静态文件有修改时,会很方便的拿到最新的修改版本,而未修改的静态文件则依然使用缓存。这样避免了修改后用户静态文件不更新的尴尬,并且可以充分利用缓存。

demo

django_pipeline_demo

安装

sudo mkdir /opt/projects
git clone https://github.com/duoduo369/django_pipeline_demo.git
cd django_pipeline_demo
ln -s $(pwd) /opt/projects
ln -s /opt/projects/django_pipeline_demo/deploy/nginx/django_pipeline.conf /etc/nginx/sites-enabled
pip install -r requirements.txt
python manage.py runserver 0.0.0.0:9888
nginx -s reload
vim /etc/hosts 添加 127.0.0.1:9888 django_pipline_demo.com

django的库pipeline

mako, django-mako, django-pipeline-demo

效果是这样的,以 django_pipeline_demo 为例。

先说最终用法

  1. debug必须为False(上线本来就是False),如果为True则使用django默认查找静态文件的方式,不会使用pipeline。
  2. python manage.py collectstatic
  3. 重启django项目

重点代码解释

settings.py的几个配置, 如何安装配置django-pipeline,请移步文档.

解释几个collect有关的配置

# python manage.py collectstatic 后文件会扔到STATIC_ROOT下面
STATIC_ROOT = './statics'

# django的模板会从这些目录下查找
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

# 开发时css的路径,collectstatic会从这里查找然后丢到STATIC_ROOT下
# 使用pipeline后会在静态文件中添加hash码,例如css/index.css
# collectstatic后会变成 css/index.as1df14jah8dfh.css
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static_dev"),
)

templates/common/static_pipeline.html

这是用mako定义了一个url,以后静态文件使用这个url导入,就可以找到hash的版本了。

<%!
from django.contrib.staticfiles.storage import staticfiles_storage
%>

<%def name='url(file)'><%
try:
    url = staticfiles_storage.url(file)
except:
    url = file
%>${url}</%def>

index.html

首先导入/common/static_pipeline.html,需要引用静态文件的地方使用${static.url('未hash的文件路径')}

<%namespace name='static' file='/common/static_pipeline.html'/>
....
    <link rel="stylesheet" href="${static.url('css/index.css')}" type="text/css" media="all" />
....

© 著作权归作者所有

duoduo3_69
粉丝 89
博文 57
码字总数 83746
作品 0
青岛
程序员
私信 提问
加载中

评论(0)

Django 静态资源管理利器:django-pipeline

django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 的 命令,在开发、部署环境下切换非常方便。 写 codinn.com 代码的时候,静态资源管理方面遇到了一...

索隆
2012/07/16
438
0
用 Django 的 Pipeline 优化网站前端

本文来自 @图拉鼎 的博客: 今天开始一步步优化网站,尽可能的让其响应更快、更省流量。第一步就是优化前端。 以前在玩Rails的时候,很羡慕它全自动化的Assets Pipeline,完全不用人操心就可...

红薯
2012/10/24
698
2
python-django setting.py 配置

  前言      django-admin创建项目后,默认就会有一个配置文件settings.py,在跟项目名字相同的目录下就可以找到这个文件。      setting.py   这个配置文件也是一个py的脚本。可...

运维菜
2018/01/23
0
0
15款Django开发常用软件包

是一款高级的Python Web框架,可以帮助开发者快速创建web应用。我们这里整理了15款Django开发中常用的软件包,学会使用它们可以节省大量开发时间,提高开发效率。同时,也给出了它们的pip安装...

xiaoge2016
2018/04/20
367
0
使用Django来处理对于静态文件的请求

使用Django来处理对于静态文件的请求 引言 本方法适用于linux+python2.7+django1.2,使用django自带的web服务。 同样也适用于sina app engine。 1、准备工作 准备css文件,准备js文件,准备i...

KavenSu
2014/06/04
74
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 5.7.25 解压版安装-主从同步配置

主数据库配置 [mysqld]# 设置3306端口port=3306# innodb_force_recovery = 0# 设置mysql的安装目录basedir=D:\\mysql\\master# 设置mysql数据库的数据的存放目录datadir=D:\\m...

jxlgzwh
21分钟前
19
0
浅显易懂设计模式 · 简单工厂模式

Simple Factory Pattern 简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建...

峰哥呀
24分钟前
26
0
Html5游戏开发案例

Html5游戏开发案例 Html游戏开发案例(一) 拼图游戏 游戏规则介绍: 拼图游戏将一幅图片分割成若干拼块并将它们随机打乱顺序。当将所有拼块都放回原位置时,就完成了拼图(游戏结束)。 在“...

月光色丶
30分钟前
9
0
Python数据分析-第5章Series(上)

系列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,系列不要求数据类型是相同的。 系列是一个一维数组,只有一个维度(或称作轴)是行(row),在访...

惊天动地的胖子
31分钟前
11
0
设计模式学习---工厂模式

工厂模式:主要用于实例化对象,把实例化对象代码与使用对象代码分开, 目的是降低系统中代码耦合度,并且增强了系统的扩展性,如果实例化一个对象的过长很复杂,需要一定的代码量,并且多处...

爸爸受不了
38分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部