在理解Mako(Python的模板引擎)的过程中,我开始使用defs构造。
我尝试做的一件事是在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()
,就像if_statement
的参数在def的任何其他内容之前被评估并在前面呈现一样。
这是预期的行为吗?如果是,为什么? 另外,我怎样才能实现我的目标呢?
答案 0 :(得分: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)
。