2013-05-10 7 views
1

Так что я использую оператор tal: repeat для генерации таблиц внутри другой таблицы. К сожалению, я не знаю, как придать каждой таблице уникальный идентификатор при создании. Как я могу это сделать?дать каждой таблице новый идентификатор, используя zpt

Я пытаюсь использовать:

tal:attributes="id myindex" 

и

tal:attributes="id string:${myindex}" 

Но я не могу заставить его работать.

Пример:

<table id="tableIngrepen" class="table"> 
<thead class="header"> 
<tr> 
    <th>Header1</th> 
    <th tal:repeat="procedur_headers Procedur_Headers" tal:content="procedur_headers" > </th> 
</tr> 
</thead> 
<tr tal:repeat="diagnoses Diagnoses"> 
    <div tal:define="myindex python:repeat['diagnoses'].index"> 
     <td ><input type='text' id="dz_code" readonly></input></td> <!-- onfocus="rijencolom($(this).parent().children().index($(this)),$(this).parent().parent().children().index($(this).parent()))" --> 
     <td colspan="5"> 
      <table tal:attributes="id myindex" class="table table-hover" style="border-style:none"> 
       <thead class="header"> 
        <tr> 
         <th tal:repeat="procedur_headers Procedur_Headers" tal:content="procedur_headers" style="display:none"> </th> <!-- style="display:none"--> 
        </tr> 
       </thead> 
       <tr tal:repeat="list_procedur List_Procedur[myindex]"> 
        <td><input type='text' ></input></td> 
        </tr> 
       <tr> 
        <td><input type='text' ></input></td> 
        <td ><input type='text'></input></td> 
        <td><input type='text' ></input></td> 
        <td><input type='text' ></input></td> 
       </tr> 
      </table> 
     </td> 
    </div> 
</tr> 

ответ

1

Вы можете использовать TAL repeat variable, что каждый цикл создает repeat:

<table tal:attributes="id string:table-${python:repeat['diagnoses'].index}" 
     class="table table-hover" style="border-style:none"> 

или используя выражение пути:

<table tal:attributes="id string:table-${path:repeat/diagnoses/index}" 
     class="table table-hover" style="border-style:none"> 

В зависимости от того, как был настроен хамелеон, вы можете опустить либо path:, либо префикс python:; какой бы ни был тип выражения по умолчанию. Pagetemplates по умолчанию равен path: выражениям, Chameleon - python:, но обычно интеграция Plone переключается на path: для обеспечения совместимости.

Отображение repeat содержит специальный объект для каждой переменной цикла; ваш цикл использует имя myindex, поэтому существует объект repeat['diagnoses'], который содержит такие вещи, как индекс цикла, четность итераций (нечетные или четные) и даже римские числовые версии счетчика циклов.

+0

ли синтаксис ок? Это не 'table - $ {repeat/myindex/index}'? –

+0

@keul: Ах, да. Это Хамелеон, используемый с * Plone *; default Chameleon использует выражения Python, но интеграция Plone переключает это на выражения пути. –

+0

Так что, я думаю, я был на правильном пути, спасибо за объяснение, это было больше, чем я мог надеяться. Тем не менее, я думаю, что использую по умолчанию chameleon zpt, потому что, когда я использую код u, я получаю следующую ошибку: TypeError: неподдерживаемый тип операндов для /: 'RepeatDict' и 'callableint' ==> Expression: "string : таблица - $ {повтор/myindex/индекс}». – GertV

0

Если Хамелеон ЗПТ не нравится синтаксис строки, вы могли бы пойти с синтаксисом выражения питон:

<table tal:attributes="id python:'table-' + repeat['diagnoses'].number" 
     class="table table-hover" style="border-style:none"> 

Или, если вы хотите, чтобы быть равным нулю на основе:

<table tal:attributes="id python:'table-' + repeat['diagnoses'].index" 
     class="table table-hover" style="border-style:none">