在 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 中似乎是正确的方法。
I'd like to use a def
as a function, and call it from an if
block:
<%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
Needless to say, this syntax does not work. I don't want to just do an expression substitution (and just render the output of the def) as the logic is consistent, but the content rendered differs from place to place.
Is there a way to do this?
Edit:
Enclosing the logic in the def in <% %>
seems to be the way to go.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需在 普通 Python 中定义整个函数:
或者您可以在 Python 中定义该函数并传递它结合上下文。
Just define the whole function in plain Python:
Or you could just define the function in Python and pass it to the context.
是的,在 def 中使用简单的 Python 语法是可行的:
如果有人知道更好的方法,我很乐意听到。
Yes, using plain Python syntax in the def works:
If anyone knows a better way, I'd love to hear it.