我尝试使用变色龙创建模板。这是一个代码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>
我的问题是中间标签没有打印;怎么了?
答案 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
变量实际上仅用于存储循环元数据;当前计数,first
和last
标记,odd
和even
标记等。