2012-07-27 42 views
0

我已經制作了一個表示樹結構的模板。樹的每個節點都有一個ID,一個名稱,一個孩子列表(tree_children)和一個擴展屬性。mako模板遞歸:AttributeError:'未定義'對象沒有屬性'ID'

我在樹結構中配置幾個節點,然後調用下面的函數與根節點:

def print_tree_info(oCat, iOffset=0): 
    """ 
    just for testing purposes. print to console 
    """ 
    sOffset = ' '*iOffset 
    if oCat.expanded: 
     sButton = '-' 
    else: 
     if oCat.tree_children: 
      sButton = '+' 
     else: 
      sButton = '.' 
    print("{0}{1}{2}".format(sOffset,sButton,oCat.name)) 
    if oCat.expanded: 
     for oChild in oCat.tree_children: 
      print_tree_info(oChild,iOffset+1) 

它印

-ROOT_NODE 
    +major1 
    .base2 

這是巨大的。

現在,將相同的節點結構傳遞給mako模板的渲染函數(以及mako模板本身),我得到屬性錯誤。

下面是如何呈現模板:

template = Template(..........) 
html = template.render(category=root_node, item_template=template) 

這裏是模板

%if category is UNDEFINED: 
ERROR 
%elif category: 
<div class="tree_item" category_id="${category.id}"> 
%if category.expanded: 
    <a class="collapse_tree_item" category_id="${category.id}">-</a> 
%elif category.tree_children: 
    <a class="expand_tree_item" category_id="${oCategory.id}">+</a> 
%endif 
<a class="select_tree_item">${category.name}</a> 
%if category.expanded: 
    %for oChild in category.tree_children: 
      ${item_template.render(category=oChild,item_template=item_template)} 
    %endfor 
%endif 
</div> 
%endif 

回答

1
<a class="expand_tree_item" category_id="${oCategory.id}">+</a> 

應該

<a class="expand_tree_item" category_id="${category.id}">+</a> 

教訓:在您的命名約定相一致。

相關問題