jinja2功能和过滤器之间的区别?

Pat*_*Yan 11 python jinja2 flask

我正在编写一些函数来处理模板中的日期和文本格式.

def coolfunc(s):
    return s + ' is cool'

 app.jinja_env.globals.update(coolfunc=coolfunc)
 app.jinja_env.filters['coolfunc'] = coolfunc
Run Code Online (Sandbox Code Playgroud)

模板:

{{ coolfunc(member.name) }}
{{ member.name | coolfunc }}
Run Code Online (Sandbox Code Playgroud)

输出:

John is cool
John is cool
Run Code Online (Sandbox Code Playgroud)

我不确定函数和过滤器之间的真正区别是什么.在我看来,过滤器看起来更干净?

Sin*_*ion 11

不同之处在于过滤器可以对Environmentor 进行特殊访问Context,但是常规(全局)函数不能; 特别是有contextfilter朋友.这对于执行本地化和格式化等上下文敏感的操作非常有用,而不依赖于全局状态.

http://jinja.pocoo.org/docs/api/#utilities