Зацикливание шаблона хамелеона

Я попытался создать шаблон с помощью хамелеона. Вот фрагмент кода.

Вызов модуля 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>

Моя проблема в том, что средние теги не печатаются; что случилось?


person Nikhil Rupanawar    schedule 19.10.2012    source источник


Ответы (2)


Строка <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 и т. д.

person Martijn Pieters    schedule 20.10.2012

Вы перебираете tdelete_list, который представляет собой список с одним элементом (словарь, который вы создаете в строке 2). Вот как вы получаете этот тег <DeleteItems />. В этом теге вы пытаетесь перебрать repeat.deletions, однако в контексте, который вы передаете шаблону, нет объекта с именем repeat.deletions.

Я предполагаю, что из вашего именования переменных вы неправильно интерпретируете то, что делает tal:repeat="deletions tdelete_list" - он выполняет итерацию по tdelete_list и присваивает имя deletions каждому элементу этой итерации по очереди. Внутри тега <DeleteItems /> вы можете получить доступ к этому элементу под этим именем.

person Simon    schedule 19.10.2012