模板过滤器扩展点

描述

这个扩展点缩写为filter。

模板过滤器的概念来自于jinja2,其本质是常规的python函数。过滤器与变量用管道符号( | )分割,并且也可以用圆括号传递可选参数,过滤器左边作为第一个参数,其余的参数作为额外的参数或关键字参数传递到过滤器。

插件需要通过register返回filter字段,这个字段数据类型可以是dict或者是list。如果是dict,那么格式是{filter_name: func}。如果是list,那么格式是[func1, func2],此时函数名作为过滤器名,但是如果使用了匿名函数,那么过滤器名称是<lambda>,不友好!

所以,如果格式是list,允许元素类型为tuple,即:[func1, (name, func2)],从而设置过滤器的名字。

Flask-PluginKit通过 _filter_handler() 加载filter,这个方法会检测filter规则及内容。

一旦注册完成后,你就可以在模板中像 Jinja2 的内建过滤器一样使用它们了,关于这部分可以参考Jinja2文档 filters

示例

  • 注册filter

def reverse_filter(s):
    return s[::-1]

def register():
    return dict(
        filter=dict(reverse=reverse_filter)
    )
  • 在模板中调用

<div>
    {% for x in ['m','y', 'l', 'i', 's', 't'] | reverse %}
        {{ x }}
    {% endfor %}
</div>