我是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!') %}
答案 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
。