1

我尝试使用变色龙创建模板。这是一个代码片段。

调用模块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>

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

4

2 回答 2

1

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

我从你的变量命名中猜想你误解了什么tal:repeat="deletions tdelete_list"- 它迭代tdelete_list并依次将名称分配给该deletions迭代的每个元素。在<DeleteItems />标签内,您可以访问该名称下的元素。

于 2012-10-19T12:29:36.027 回答
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变量实际上只用于存储循环元数据;当前计数、firstandlast标志、oddandeven标志等。

于 2012-10-20T09:07:51.590 回答