Mako:def 组合(在渲染时)未正确评估

Mako: def composition (at render time) not evaluating properly

在理解 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 的任何其他内容之前被评估并在前面呈现。

这是预期的行为吗?如果是,为什么? 另外,我怎样才能实现我想要做的事情?

是的,由于 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)