在Mako模板中调用def作为函数
我想把一个 def
定义成一个函数,然后在一个 if
语句块里调用它。
<%def name="check(foo)">
% if len(foo.things) == 0:
return False
% else:
% for thing in foo.things:
% if thing.status == 'active':
return True
% endif
% endfor
% endif
return False
</%def>
% if check(c.foo):
# render some content
% else:
# render some other content
% endif
不用说,这种写法是行不通的。我不想只是简单地替换表达式(也就是只显示 def
的输出),因为逻辑是一致的,但不同地方显示的内容却不一样。
有没有什么办法可以做到这一点呢?
编辑:把 def
里的逻辑用 <% %>
包起来,似乎是个可行的办法。
2 个回答
2
是的,在定义函数的时候使用普通的Python语法是可以的:
<%def name="check(foo)">
<%
if len(foo.things) == 0:
return False
else:
for thing in foo.things:
if thing.status == 'active':
return True
return False
%>
</%def>
如果有人知道更好的方法,我很想听听。
7
只需要用普通的Python来定义整个函数:
<%!
def check(foo):
return not foo
%>
%if check([]):
works
%endif
或者你也可以直接在Python中定义这个函数,然后把它传递到上下文中。