【问题标题】:Difference between jinja2 functions and filters?jinja2 函数和过滤器的区别?
【发布时间】:2014-03-18 21:32:38
【问题描述】:

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

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

 app.jinja_env.globals.update(coolfunc=coolfunc)
 app.jinja_env.filters['coolfunc'] = coolfunc

模板:

{{ coolfunc(member.name) }}
{{ member.name | coolfunc }}

输出:

John is cool
John is cool

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

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    不同之处在于过滤器可以对EnvironmentContext有特殊的访问权,但常规(全局)函数不能;具体来说,有contextfilter 和朋友们。这对于执行上下文敏感的事情(例如本地化和格式化)很有用,而不依赖于全局状态。

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

    【讨论】:

    • 阅读 Jinja 文档似乎 @contextfilter@contextfunction 提供了相同的机会?使用它们时除了语法有什么真正的区别吗?
    • @bohrax 我认为唯一的区别是一个提供过滤器,另一个提供功能。在 jinja2 中,它们在模板级别的语法不同:过滤器用作 {{ foo | myfilter (bar, baz) }} 而函数是 {{ myfunction (foo, bar, baz) }}。向Environment 添加一个普通的python 函数不会自动赋予它这些上下文功能,它需要添加装饰器。
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 2019-05-01
    • 2019-02-11
    • 2013-09-27
    • 2021-08-21
    • 2015-04-18
    • 2014-01-15
    • 2019-08-29
    相关资源
    最近更新 更多