1

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

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

4

1 回答 1

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)

于 2015-07-06T13:52:51.550 回答