Jinja2:寻找帮助者

时间:2010-07-11 17:06:53

标签: python jinja2

我是Jinja2模板引擎的新手。是否有类似Zend Framework的视图助手?我可以创建简单的函数并在我的所有模板文件中重复使用它们吗?

这样的东西?

#somewhere in my python code:
def nice_demo_function(message):
    """"return a simple message"""
    return message

所以我可以使用它:

<!-- now in my template-file -->
{%  nice_demo_function('yes, this works great!') %}

2 个答案:

答案 0 :(得分:3)

您可以通过多种方式向模板公开辅助函数。您可以使用macros定义它们,然后将import定义为使用它们的模板。您可以向Template对象的globals attribute添加函数,或将它们传递给render()方法。你可以继承模板来做同样的事情,而不必每次都重复自己。如果你想得到真正的幻想,你也可以考虑写extensions(但你可能不需要深入了解)。

答案 1 :(得分:2)

在某些时候,您将创建一个Jinja2环境。环境中有一个名为filters的属性,它是一个将名称映射到函数的字典。所以你想要做的是:

def my_helper(value):
  return "-~*#--- %s ---#*~-" % value

env = Jinja2.Environment(...)
env.filters['my_helper'] = my_helper

现在,您可以在模板中执行以下操作:

<p>The winner is {{ winner | my_helper }}</p>

您的函数将使用变量的值调用,在本例中为winner。如果你正在使用Pylons,这一切都发生在config/environment.py