2016-12-25 67 views
0

更深層次的評價我有神社蟒蛇功能,resturns含神社指令的字符串,像這樣:獲取神社

def test(): 
    # stuff ... 
    return "The value of x is {{x}}" 

我設置此功能到神社的全球背景下,現在我想用它:

{% set x = 3 %} 
{{ test() }} 

不幸的是, 「測試」 的返回值不是評價,所以結果是:

The value of x is {{x}} 

我可以以某種方式強制對test的結果進行評估嗎?

回答

1

你最好使用jinja2 macro。在這種情況下,你很可能會通過x到宏:

{% macro test(x) -%} 
The value of x is {{x}} 
{%- endmacro %} 

{% set x = 3 %} 
{{ test(x) }} 

請注意,我已經通過x給宏 - 真的是沒有一個很好的理由不通過x,它使事情變得更加清晰。另外,我甚至不知道如何讓它隱含地傳遞全局變量;-)。


一種替代策略(我不推薦,由於減少的清晰度和增加搞亂的東西了的風險)。將您的回調函數中,呈現模板:

from jinja2 import Template 
def test(x): 
    return Template('The value of x is {{x}}').render(x=x) 

這裏我ve仍然通過x到模板的上下文中。 AFAIK,模板沒有辦法在函數中選取全局上下文(事實上,這會導致非常混亂的代碼)。如果您在test函數中渲染模板,則在使用autoescape=True時,必須注意不要意外地將內容轉義兩次。