Выражение TALES внутри свойства id - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь создать динамически созданные флажки на шаблоне Plone, используя tal-repeat. Подробности см. В приведенном ниже коде.

<div tal:define="global pessoa python:view.dados_pessoa()" class="drop-element"></div>
<div class="row m-t-10" tal:repeat="telefone python: pessoa.get('telefones', [])">
  <input type="hidden" class="idTelefone" name="telefones.id" value="${python: telefone.get('id', '')}" />
  <div class="col s3 grey-text text-darken-1">
     <input class="grey-text text-darken-1 tipoTelefone" type="text" name="telefones.tipo" value="${python: telefone.get('tipo', '').capitalize()}" autoComplete="off" readonly />
  </div>
  <div class="col s5">
     <input class="grey-text text-darken-1 numeroTelefone" type="text" name="telefones.numero" value="${python: '(%s) %d' % (telefone.get('ddd', ''), telefone.get('numero', ''))}" autoComplete="false" readonly/>
  </div>
  <div class="col s2">
     <input type="checkbox" id="${python: telefone.get('id', '')}" name="telefones.sms" ${python: 'checked' if telefone.get('sms', '') else ''}>
     <label for="${python: telefone.get('id', '')}" class="active fix-label" style="top: 25px !important">SMS</label>
  </div>
  <div class="input-field m-t-10 col s2">
     <button type="button" class="sp_btn right red m-t-05 btn-remover-telefone">Remover</button>
  </div>
</div>

Проще говоря, pessoa['telefones'] - это список, который может содержать 0 или более словарей.

Дело здесь в строках:

<input type="checkbox" id="${python: telefone.get('id', '')}" name="telefones.sms" ${python: 'checked' if telefone.get('sms', '') else ''}>
<label for="${python: telefone.get('id', '')}" class="active fix-label" style="top: 25px !important">SMS</label>

Поскольку мой сайт Plone использует материализацию, мне нужно подключить метку к флажку через идентификатор, иначе он не будет отображаться. Похоже, это будет работать, поскольку каждый индекс в telefone имеет уникальный идентификатор. Проблема в том, что при визуализации свойство ID отображается как строка выражения TALES вместо результата выражения, например:

<input type="checkbox" id="${python: telefone.get('id', '')}" name="telefones.sms">
<label for="2138518" class="active fix-label" style="top: 25px !important">SMS</label>

Почему? как я могу это обойти? Искал все, что мог, и не нашел решения.

1 Ответ

2 голосов
/ 17 июня 2020

какую версию Plone вы используете? Более ранние версии выражений вроде $ {} не существовали. То, что должно работать всегда, выглядит примерно так:

<input type="checkbox" tal:attributes="id python: telefone.get('id', '')"> name="telefones.sms">

надеюсь, что это поможет вам, радуется Майк

...