2010-07-11 59 views
0

我是Jinja2模板引擎的新手。有没有像Zend Framework的视图助手?我可以创建简单的函数,并在所有模板文件中重复使用它们吗?Jinja2:寻找一个视图帮助者

这样的事情?

#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!') %} 

回答

3

有多种方式可以公开的辅助功能,以您的模板。你可以使用macros,然后import将它们定义为使用它们的模板。您可以将函数添加到模板对象的globals attribute,或将它们传递给render()方法。您可以继承Template的子类,而无需每次都重复一次。如果你想变得很花哨,你也可以考虑编写extensions(但你可能不需要那么深)。

+0

全球性的事情是非常急需的,我需要...... – DerKlops 2010-07-12 13:19:23

2

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

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