Пропустить сайт сайта в возвращаемом результате при использовании getPath в шаблонах страниц Plone

У меня есть кусок TALES для шаблона страницы в Plone, который просматривает результаты коллекции и вставляет их в поле (аналогично портлету коллекции)

У меня возникла проблема с получением URL-адреса из возвращенных элементов, я использовал getPath, однако он возвращает имя сайта, поэтому мои URL-адреса в конечном итоге будут http://mysite.com/ThePloneSite/folder/page, а не просто http://mysite.com/folder/page, в настоящее время мой пример TALES выглядит следующим образом:

<a tal:attributes="href string:${item/getPath}/view">Item</a>

Я перепробовал все возможные варианты, но не могу вспомнить их все, поэтому вот пара, которые не работают:

(это ничего не возвращает)

<a tal:attributes="href item/absolute_url">Item</a>

это дает мне трассировку, жалующуюся на «getpath»:

<a tal:attributes="python:item.getObject().absolute_url()">Item</a>

Единственная причина, по которой название сайта в ссылке раздражает, заключается в том, что для доступа к кнопкам «Состояние» и «Показать» вы должны нажать «Просмотр» после первоначального нажатия на ссылку.

ПРИМЕЧАНИЕ: последний пример работает, когда вы используете getFolderContents, однако я понимаю, что возвращаемые результаты из коллекции отличаются.

Любая помощь будет принята с благодарностью, спасибо.

ИЗМЕНИТЬ Отслеживание абсолютной версии:

Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, in call_object
  Module Shared.DC.Scripts.Bindings, line 322, in __call__
  Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
  Module Products.PageTemplates.ZopePageTemplate, line 334, in _exec
  Module Products.PageTemplates.ZopePageTemplate, line 431, in pt_render
  Module Products.PageTemplates.PageTemplate, line 79, in pt_render
  Module zope.pagetemplate.pagetemplate, line 113, in pt_render
  Module zope.tal.talinterpreter, line 271, in __call__
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 888, in do_useMacro
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 533, in do_optTag_tal
  Module zope.tal.talinterpreter, line 518, in do_optTag
  Module zope.tal.talinterpreter, line 513, in no_tag
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 852, in do_condition
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 533, in do_optTag_tal
  Module zope.tal.talinterpreter, line 518, in do_optTag
  Module zope.tal.talinterpreter, line 513, in no_tag
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 954, in do_defineSlot
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 852, in do_condition
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 946, in do_defineSlot
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 533, in do_optTag_tal
  Module zope.tal.talinterpreter, line 518, in do_optTag
  Module zope.tal.talinterpreter, line 513, in no_tag
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 821, in do_loop_tal
  Module zope.tal.talinterpreter, line 343, in interpret
  Module zope.tal.talinterpreter, line 405, in do_startTag
  Module zope.tal.talinterpreter, line 482, in attrAction_tal
  Module Products.PageTemplates.Expressions, line 225, in evaluateText
  Module zope.tales.tales, line 696, in evaluate
   - URL: /peacehospice/portal_skins/custom/home_page_view
   - Line 200, Column 12
   - Expression: <PythonExpr alldoc.getObject().absolute_url()>
   - Names:
      {'container': <PloneSite at /peacehospice>,
       'context': <ATDocument at /peacehospice/front-page>,
       'default': <object object at 0x7fbed9313b30>,
       'here': <ATDocument at /peacehospice/front-page>,
       'loop': {u'alldoc': <Products.PageTemplates.Expressions.PathIterator object at 0x7fbebcd20c50>},
       'nothing': None,
       'options': {'args': ()},
       'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x7fbebde89680>,
       'request': <HTTPRequest, URL=http://demo.kcsts.co.uk/front-page/home_page_view>,
       'root': <Application at >,
       'template': <ZopePageTemplate at /peacehospice/home_page_view used for /peacehospice/front-page>,
       'traverse_subpath': [],
       'user': <PropertiedUser 'dan'>}
  Module Products.PageTemplates.ZRPythonExpr, line 48, in __call__
   - __traceback_info__: alldoc.getObject().absolute_url()
  Module PythonExpr, line 1, in <expression>
  Module AccessControl.ImplPython, line 716, in guarded_getattr
  Module AccessControl.ImplPython, line 658, in aq_validate
  Module AccessControl.ImplPython, line 552, in validate
  Module AccessControl.ImplPython, line 322, in validate
  Module AccessControl.ImplPython, line 749, in raiseVerbose
  Module AccessControl.ImplPython, line 726, in item_repr
  Module plone.app.contentlisting.catalog, line 29, in __repr__
  Module plone.app.contentlisting.catalog, line 74, in getPath
  Module Products.ZCatalog.CatalogBrains, line 51, in getPath
AttributeError: getpath

TALES для получения содержимого коллекции:

<div id="all-documents" tal:define="allDocsBatch python:context.documents.alldocuments.results(b_start=b_start,b_size=10)">
  <h3>All Documents</h3>
  <div class="tabbedWrapper">
    <div class="item" tal:repeat="alldoc allDocsBatch">
      <p>
        <img tal:replace="structure alldoc/getIcon" />
        <a tal:attributes="href python:alldoc.getObject().absolute_url()" tal:content="alldoc/Title" />
        <span class="tags" tal:condition="alldoc/Subject" tal:define="alldoctag alldoc/Subject">
          <a tal:repeat="tag alldoctag" tal:content="tag"
             tal:attributes="href string:${context/portal_url}/@@search?Subject:list=${tag}"/>
        </span>
      </p>
    </div>
  </div>
</div>

РЕДАКТИРОВАНИЕ №2

ПРИМЕЧАНИЕ нашел ссылку http://copilotco.com/mail-archives/plone-users.2007/msg05113.html, который может помочь, но у меня пока не было возможности его посмотреть.


person Dan    schedule 07.06.2013    source источник
comment
Полная трассировка для версии .absolute_url() была бы полезна.   -  person Martijn Pieters    schedule 07.06.2013
comment
Если getFolderContents возвращает URL-адреса с надлежащим виртуальным корнем, происходит что-то более глубокое. Вероятно, где-то проблема с цепочкой приобретения. Как получить результаты сбора?   -  person Martijn Pieters    schedule 07.06.2013
comment
@MartijnPieters Добавлена ​​трассировка, также добавлены СКАЗКИ   -  person Dan    schedule 07.06.2013


Ответы (1)


Если элемент является мозгом каталога (как в вашем примере), вам нужно вызвать item/getURL. absolute_url для реальных объектов.

person keul    schedule 07.06.2013
comment
Большое спасибо, я забыл о getURL, я не уверен, почему я вообще использовал getPath! Теперь это кажется таким очевидным -.- - person Dan; 07.06.2013
comment
Показывает, насколько я был внимателен; даже не понял, что это getPath против getURL.. - person Martijn Pieters; 07.06.2013
comment
В любом случае, спасибо за ваше время @MartijnPieters, это ценится - person Dan; 07.06.2013