参考文档:Building websites in Python with Flask
版权所有,转载请注明出处
在使用Flask进行web开发中,经常会用到很多的静态CSS或JS文件,占用了大量的空间,有没有办法可以将这些静态文件打包成一个文件,并进行压缩处理呢?Flask-Assets就提供了这个功能。
Flask-Assets实际上是对webassets库进行了一层封装。
安装
$ pip install Flask-Assets
复制
创建打包对象
假设我的资源文件放置在
static/
目录中,其中又包含子目录
/css
,
/js
以及
/vendor
。下面是代码结构:
example/
static/
css/
layout.less
js/
main.js
vendor/
bootstrap/
css/
bootstrap.css
js/
bootstrap.min.js
jquery/
jquery-1.7.2.min.js
复制
在webassets中,资源文件会被分组进行打包,下面是打包文件assets.py的配置:
from flask_assets import Bundle
common_css = Bundle(
'vendor/bootstrap/css/bootstrap.css',
Bundle(
'css/layout.less',
filters='less'
),
filters='cssmin', output='public/css/common.css')
common_js = Bundle(
'vendor/jquery/jquery-1.7.2.min.js',
'vendor/bootstrap/js/bootstrap.min.js',
Bundle(
'js/main.js',
filters='closure_js'
),
output='public/js/common.js')
复制
这里我们定义了两个打包对象,一个用来打包css文件,一个用来打包js文件。而且里面还嵌套定义了打包对象,以便对打包对象指定不同的过滤器。
使用打包文件
{% assets "common_css" %}
<link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}" />
{% endassets %}
{% assets "common_js" %}
<script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}
复制
注册打包文件
from flask_assets import Environment
from webassets.loaders import PythonLoader as PythonAssetsLoader
import assets
# ...
assets_env = Environment(app)
assets_loader = PythonAssetsLoader(assets)
for name, bundle in assets_loader.load_bundles().iteritems():
assets_env.register(name, bundle)
复制
在上面的代码中,使用PythonAssetsLoader加载配置,然后将打包对象注册到Envirnment中。
可以在应用参数中配置
ASSET_DEBUG=True
来开启调试信息。
添加命令行命令
from flask_assets import ManageAssets
from example import assets_env
# ...
manager.add_command("assets", ManageAssets(assets_env))
复制
现在就可以使用下面的命令进行打包文件了:
$ ./manage.py assets rebuild
复制