2010-07-11 74 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