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)
。
在理解 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)
。