变色龙模板循环

时间:2012-10-19 10:43:36

标签: python chameleon template-tal

我尝试使用变色龙创建模板。这是一个代码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>

我的问题是中间标签没有打印;怎么了?

2 个答案:

答案 0 :(得分:1)

您正在迭代tdelete_list这是一个包含一个元素的列表(您在第2行中创建的字典)。这就是你获得那个<DeleteItems />标签的方式。在该标记内,您尝试迭代repeat.deletions,但是在传递给模板的上下文中,没有名为repeat.deletions的对象。

我猜你从变量命名中误解了tal:repeat="deletions tdelete_list"所做的事情 - 它会迭代tdelete_list并依次将名称deletions分配给该迭代的每个元素。在<DeleteItems />标记内,您可以使用该名称访问该元素。

答案 1 :(得分: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标记等。