Python Mako模板 - 如何基于上下文中的值动态决定调用哪个def或函数?

时间:2012-12-11 22:46:05

标签: python templates mako

我会在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被调用,这将最终填写我想要的实际内容那些地方。

1 个答案:

答案 0 :(得分: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>