2011-01-20 72 views
2

的功能,我想用一個def作爲一個函數,並調用它從if塊:調用高清作爲一個Mako的模板

<%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的邏輯似乎是要走的路。

回答

5

plain Python只要定義功能全:

<%! 
def check(foo): 
    return not foo 
%> 
%if check([]): 
    works 
%endif 

或者你可以只定義功能在Python並把它傳遞到上下文。

+0

好的,但是在mako def中Python有沒有優勢? – Hollister 2011-01-20 16:56:03

1

是的,在使用高清純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> 

如果有人知道一個更好的方法,我很樂意聽到這種說法。