3

我会在 Mako 文件中执行以下操作:

%for operation in operation_list:
    ${operation['name']}
    ${${operation['name']}Body()}
%endfor

<%def name="operationOneBody()">
   some stuff
</%def>

<%def name="operationTwoBody()">
   some other stuff
</%def>

基本上,我期望上下文将包含名称为“operationOne”和“operationTwo”的操作,我想动态决定插入哪个 Mako Def。

在这一行${${operation['name']}Body()}中,想法是内部 ${} 标记${operation['name']}将解析为“operationOne”,然后是“operationTwo”等等,所以外部 ${} 看起来就像${operationOneBody()}第一次通过循环,${operationTwoBody()}第二次通过,等等——这将导致适当的 defs 被调用,最终将在这些地方填充我想要的实际内容。

4

1 回答 1

5

您可以将函数放入由操作名称键入的字典中。我认为这应该做你想要的:

<% operations = { 'one': operationOneBody, 'two': operationTwoBody } %>

%for operation in operation_list:
    ${operation['name']}
    ${operations[operation['name']]()}
%endfor

<%def name="operationOneBody()">
   some stuff
</%def>

<%def name="operationTwoBody()">
    some other stuff
</%def>
于 2012-12-11T23:23:34.020 回答