静态资源¶
描述¶
一般来说,开发的时候访问静态文件可以通过Flask,但是正式环境中,肯定是WSGI服务器和诸如nginx、apache等web服务器结合使用的,静态资源通过nginx处理才能发挥效果。
不过对Flask-PluginKit的插件来说,静态资源位于插件的static目录中,假如一个web应用很多插件,那么就有数个static目录,那么通过nginx肯定是不方便配置的。
所以Flask-PluginKit自定义了一个端点为assets的视图以访问插件下static目录,同时又提供了一个方法 emit_assets()
可以在模板中方便地获取插件下的静态文件。当然,这个方法内部使用的是 url_for()
,所以你也可以使用url_for构建url。
上面说的assets视图可以自定义其端点,在初始化 PluginManager
时传入 static_endpoint
,同时,传入 static_url_path
可以定义视图路由前缀,使用 emit_assets 时会调用视图函数,尝试查找插件static目录,未发现时返回404错误。
另外,值得一提的是,目前会对静态文件后缀做处理。
后缀是 .css
会生成 link css 的html代码,例如:
<link rel="stylesheet" href="/assets/plugin/css/demo.css">
后缀是 .js
会生成 script 的html代码,例如:
<script src="/assets/plugin/js/demo.js"></script>
其他后缀
只会生成静态文件的url路径部分。
备注
在emit_assets中,你可以添加 _raw=True
让Flask-PluginKit不根据后缀添加代码,而是直接返回资源路径。
示例¶
静态文件
假设一个名叫plugin_demo的插件有一个static目录,文件结构是这样的:
plugin_demo/
├── __init__.py
└── static
├── css
│ └── style.css
├── hello.png
└── js
└── demo.js
访问静态文件
在模板中,通过 emit_assets 可以构建静态文件的url。
<!DOCTYPE html>
<html>
<head>
{{ emit_assets('plugin_demo','css/style.css') }}
</head>
<body>
<div class="image">
<img src="{{ emit_assets('plugin_demo', 'hello.png') }}">
</div>
<div class="showJsPath">
<b>{{ emit_assets('plugin_demo', 'js/demo.js', _raw=True) }}</b>
</div>
{{ emit_assets("plugin_demo", filename="js/demo.js") }}
</body>
</html>
此页面的实际源代码如下:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/assets/plugin_demo/css/style.css">
</head>
<body>
<div class="image">
<img src="/assets/plugin_demo/hello.png">
</div>
<div class="showJsPath">
<b>/assets/plugin_demo/js/demo.js</b>
</div>
<script src="/assets/plugin_demo/js/demo.js"></script>
</body>
</html>