我想在Jinja2有一个这样的自定义过滤器:

{{ my_list|my_real_map_filter(lambda i: i.something.else)|some_other_filter }}

但当我实现它时,我得到了这个错误:
TemplateSyntaxError: expected token ',', got 'i'

看来金贾2的语法不允许使用lambda作为参数?有什么好的解决方法吗?现在,我在python中创建lambda,然后将其作为变量传递给模板,但我希望能够只在模板中创建它。

最佳答案

不,不能将常规python表达式传递到jinja2模板中的筛选器
混淆来自于jinja2模板在许多方面与python语法相似,但您应该将其作为具有完全独立语法的代码。
jinja2有严格的规则,可以预期模板的哪一部分和它通常不允许使用python代码,它期望表达式的确切类型,这是非常有限的。
这与概念一致,表示和模型应该分开,所以模板不应该允许太多的逻辑。无论如何,与许多其他模板选项相比,jinja2是允许的,并且允许在模板中使用大量的逻辑。

关于python - lambda作为jinja2过滤器的参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24310543/

10-12 22:07