2016-12-25 49 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时,必须注意不要意外地将内容转义两次。