flask assets压缩静态文件(flask 111)

2019-08-21 17:03:08 浏览数 (1)

Flask-Assets插件用于将webassets整合进Flask项目中。

安装

使用下面命令进行安装

代码语言:javascript复制
$ easy_install Flask-Assets

或者使用pip进行安装:

代码语言:javascript复制
$ pip install Flask-Assets

使用说明

首先,创建一个Environments实例,并使用它初始化Flask应用,然后将Bundle对象注册到Assets上。

代码语言:javascript复制
from flask import Flask
from flask.ext.assets import Environment, Bundle

app = Flask(__name__)
assets = Environment(app)

js = Bundle('jquery.js', 'base.js', 'widgets.js',
            filters='jsmin', output='gen/packed.js')
assets.register('js_all', js)

创建Bundle对象可以传递任意数量的源文件作为参数,使用output参数指定输出文件路径,使用filters参数指定过滤器。所有文件的路径都是相对路径,以应用的静态文件路径问基准。 除此之外,还可以从外部文件中读取配置来创建Bundle对象,例如YAML文件。 跟其他Flask扩展一样,一个Bundle对象可以被多个Flask应用使用,只需要调用Bundle对象的init_app方法即可。

代码语言:javascript复制
app = Flask(__name__)
assets = flask.ext.assets.Environment()
assets.init_app(app)

使用打包文件

定义好资源文件assets之后,就可以将上配置的源文件进行合并与压缩处理,最终在页面中使用如下方式引用打包好之后的静态js文件。

代码语言:javascript复制
{% assets "js_all" %}
    <script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}

每当第一次渲染模板的时候Flask-Assets都会对配置好的静态文件进行合并压缩处理,如果静态文件发生改变,也会自动重新打包。如果在app的配置中设置ASSETS_DEBUG=True,则每个源文件都会单独输出,而不会合并成一个文件。

Flask 蓝图

如果在项目中用到蓝图,则可以给源文件加上蓝图的前缀来引用蓝图中的静态文件。例如:

代码语言:javascript复制
js = Bundle('app_level.js', 'blueprint/blueprint_level.js')

在上面的例子中,Bundle将打包以下两个文件:

代码语言:javascript复制
{APP_ROOT}/static/app_level.js
{BLUEPRINT_ROOT}/static/blueprint_level.js.

如果你之前使用过Python的webassets库的话,就应该知道是用webassets的时候必须设置directoryurl参数,但是在使用Flask-Assets的使用并不需要,因为Flask-Assets使用应用的静态文件路径作为代替。但是Flask-Assets中也可以自定义diectoryurl,这种情况下Flask-Assets就不能在Flask的蓝图中使用了。

直接在模板中进行配置

也可以直接在模板文件中配置打包文件:

代码语言:javascript复制
{% assets filters="jsmin", output="gen/packed.js",
          "common/jquery.js", "site/base.js", "site/widgets.js" %}
    <script type="text/javascript" src="{{ ASSET_URL }}"></script>
{% endassets %}

配置

webassets有许多配置选项,在Flask-Assets中既可以通过Environment实例对象进行设置,也可以通过app来进行设置。下面两条语句的效果是等价的。

代码语言:javascript复制
assets_env.debug = True
app.config['ASSETS_DEBUG'] = True

更多的配置选项,请查看webassets的官方文档。

管理命令

如果你已经安装了````Flask-Script,就可以使用flaskext.assets.ManageAssets```命令:

代码语言:javascript复制
from flask.ext.assets import ManageAssets
manager = Manager(app)
manager.add_command("assets", ManageAssets(assets_env))

上述的命令让开发者可以使用命令行命令来重新打包资源文件。

0 人点赞