2012-10-19 75 views
1

我試圖用變色龍創建模板。這是一個snipet代碼。變色龍模板循環

調用模塊runtemp.py

delete_list=[] 
delete={'Name':'aaa','Sirname':'bbb','Friends':['ccc','ddd','eee']} 
delete_list.append(delete) 
templates = PageTemplateLoader(os.path.join(path, "templates")) 
template = templates["delete_user.pt"] 
print template(tdelete_list=delete_list) 

模板文件delete_list.pt

<?xml version="1.0" encoding="UTF-8"?> 
<Delete> 
    <DeleteRequest> 

     <DeleteItems tal:repeat="deletions tdelete_list"> 

      <Deleteuser tal:repeat="delete repeat.deletions" > 

       <Name tal:content="repeat.delete.Name"></Name> 
       <Sirname tal:content="repeat.delete.Sirname"></Sirname> 
       <Friends> 
         <Friend tal:repeat="friend repeat.delete.Friends"> 
           <Value tal:content="friend"></Value> 
         </Friend> 
       </Friends> 

      </Deleteuser> 

    <DeleteItems> 

    </DeleteRequest> 

</Delete> 

輸出我得到:

<Delete> 
     <DeleteRequest> 

      <DeleteItems> 



      </DeleteItems> 
    </DeleteRequest> 
</Delete> 

我的問題是沒有得到印中間的標籤;哪裏不對?

回答

1

該行<DeleteItems tal:repeat="deletions tdelete_list">表示循環使用tdelete_list並將每個元素放入變量deletions中。

因此,你的內循環只需循環deletions;該repeat.前綴是這裏使用:

<Deleteuser tal:repeat="delete deletions" > 

    <Name tal:content="delete.Name"></Name> 
    <Sirname tal:content="delete.Sirname"></Sirname> 
    <Friends> 
      <Friend tal:repeat="friend delete.Friends"> 
        <Value tal:content="friend"></Value> 
      </Friend> 
    </Friends> 

</Deleteuser> 

repeat.deletions變量實際上只用於存儲循環元數據;當前計數,firstlast標誌,oddeven標誌等。

1

你正在遍歷tdelete_list這是一個元素列表(你在第2行創建的字典)。這就是你如何得到一個<DeleteItems />標籤。在該標記中,您嘗試遍歷repeat.deletions,但是在傳遞給模板的上下文中,沒有名爲repeat.deletions的對象。

我從你曲解什麼tal:repeat="deletions tdelete_list"做你的變量命名猜測 - 它遍歷tdelete_list和名稱deletions分配給依次是迭代的每個元素。在<DeleteItems />標籤內,您可以使用該名稱訪問該元素。