Вызов def как функции в шаблоне Mako
Я хотел бы использовать 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), поскольку логика последовательна, но отображаемый контент отличается от места к месту.
Есть ли способ сделать это?
Изменить: Включение логики в определение в <% %>
кажется, путь.
2 ответа
Решение
Просто определите всю функцию в простом Python:
<%!
def check(foo):
return not foo
%>
%if check([]):
works
%endif
Или вы можете просто определить функцию в Python и передать ее в контекст.
Да, использование простого синтаксиса Python в def работает:
<%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>
Если кто-нибудь знает лучший способ, я хотел бы услышать это.