模板过滤器扩展点¶
描述¶
这个扩展点缩写为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>