Jinja2: 寻找视图助手

0 投票
2 回答
1230 浏览
提问于 2025-04-16 01:08

我刚接触Jinja2模板引擎。请问有没有类似Zend框架中的视图助手的东西?我可以创建一些简单的函数,然后在所有模板文件中重复使用它们吗?

像这样吗?

#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 个回答

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里。

3

有几种方法可以把辅助函数放到你的模板里。你可以用来定义这些函数,然后再把它们导入到需要用到的模板中。你也可以把函数添加到你的模板对象的全局属性里,或者在调用render()方法时把它们传进去。如果你想要更高级一点的做法,可以考虑创建一个模板的子类,这样就不用每次都重复相同的代码。如果你想要更炫酷的功能,还可以研究一下如何编写扩展(不过你可能不需要走那么深)。

撰写回答