воскресенье, 16 мая 2010 г.

Получение значения поля объекта

Вопрос:Во всех шаблонах, встроенных в Plone используется работа с полями. Как получить значение по полю, зная имя поля? Нужно ли для этого обращаться к самому созданному объекту?

Ответ:
К полю можно обратиться и отобразить его в шаблоне можно несколькими способами, это зависит от задачи.
Если нужно отобразить поле с его виджетом, определенным в схеме, то
<metal:field use-macro="python:here.widget('title', mode='view')"> Title </metal:field> отображает виджет со значением поля как в форм просмотра,
<metal:field use-macro="python:here.widget('title', mode='edit')"> Title </metal:field> отображает виджет со значением поля как в форме редактирования
Получение значения поля в шаблоне:
<tal:entry tal:repeat="item folderContents">
 <tal:block tal:define="item_url item/getURL|item/absolute_url;
      item_id item/getId|item/id;
      item_title_or_id item/pretty_title_or_id;
      item_description item/Description;
      item_type item/portal_type;
      item_type_title item/Type;
      item_modified item/ModificationDate;
      item_created item/CreationDate;
      item_icon python:plone_view.getIcon(item);
      item_type_class python:'contenttype-' + normalizeString(item_type);
      item_wf_state item/review_state|python: wtool.getInfoFor(item, review_state', '');
      item_wf_state_class python:'state-' + normalizeString(item_wf_state);
      item_creator item/Creator;
      item_start item/start/ISO|item/StartDate|nothing;
      item_end item/end/ISO|item/EndDate|nothing;
      obj python:item.getObject();
      ">
..............
</tal:block>
</tal:entry>
В этом примере различные формы получения значений.
obj python:item.getObject(); - получение самого объекта.
К объекту обращаться нужно всегда, просто часто это делается неявно. В шаблоне и классе шаблона мы обращаемся к объекту как context. Если используется предварительная обработка в классе шаблона, то обращение к классу шаблона происходит через view:
tal:content="view/myprop",
tal:content="python:view.myMethod()"
В классе (и в шаблоне тоже) можно получить значение поля объекта:
context.getTitle(), в общем случае context/getИмя_поля_с_заглавной буквы(): context.getMyprop() - это получение значения через accessor. Accessor - автоматически создаваемый метод доступа к полю (аналог get метода в С++)
context используем в шаблоне и в классе шаблона. В классе конитент-типа используем self.
Общий способ получения значения поля:
password= self.getField('password').get(self).
Используется при переопределении accessor. Так при создании класса генерируется метод getPassword(), но его можно переопределить:
class myClass():
......
security.declarePublic('getPassword') # объявление режима доступа к методу
def getPassword(self):
mypass=self.getField('password').get(self)
..... # что-то делаем
return mypassword

Комментариев нет:

Отправить комментарий