2012-12-11 25 views
3

我会做一些这样的真子文件中的以下内容:Python Mako模板 - 如何根据上下文中的值动态决定调用哪个def或函数?

%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”行动,我想动态决定哪个真子默认插入。

在行${${operation['name']}Body()}想法是,在内部$ {}标记${operation['name']}将解析为“operationOne”,然后“operationTwo”等等,这样的话外$ {}会像${operationOneBody()}在第一时间通过循环和${operationTwoBody()}第二次通过,等等 - 这将导致适当的defs被调用,这将最终填补我想要在这些地方的实际内容。

回答

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> 
+0

谢谢。我得到了这个解决方案。 – jononomo

相关问题