Ответ:
К полю можно обратиться и отобразить его в шаблоне можно несколькими способами, это зависит от задачи.
Если нужно отобразить поле с его виджетом, определенным в схеме, то
<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
Комментариев нет:
Отправить комментарий