静态资源

描述

一般来说,开发的时候访问静态文件可以通过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>