2015-06-22 80 views
1

在理解Mako(Python的模板引擎)的过程中,我开始玩defs结构。Mako:def组合(在渲染时)没有正确评估

我试图做的一件事是在def调用中生成一个“if”语句(比如说一个JavaScript)。这里的文字:

<%def name="if_statement(x)">if (${x})</%def> 
<%def name="sample_condition()">3 == 3</%def> 

${if_statement(sample_condition())} 

输出不是预期的if(3 == 3),但3 == 3if(),就像DEF的其他任何内容之前if_statement的说法进行了评估,并在前面渲染。

这是预期的行为?如果是,为什么? 另外,我怎么能达到我想要做的?

回答

0

是的,这是由于buffering而需要的行为,但是您可以使用内置的capture()函数轻松地使其工作。这里的工作示例:

<%def name="if_statement(x)">if (${x})</%def> 
<%def name="sample_condition()">3 == 3</%def> 

${if_statement(capture(sample_condition))} 

结果是if (3 == 3)