如何从Plone中的渲染器中获取“种类”的portlet(组/上下文/类型)

时间:2012-06-26 15:48:39

标签: plone

上下文: 我想构建一个URL来遍历当前的portlet,以提供呈现特定数据的外部视图。

真实用例: 我正在做一个等待URL作为参数来获取视频字幕的视频播放器。标题存储在schema.Text字段中。所以目标是创建一个显示这些数据的视图;类似的东西:

  /++contextportlets++plone.rightcolumn/test-video/@@video_captions

所以我在python代码渲染器中,我想从中构建该URL。 (自我是渲染器)我需要:

  • 上下文中的一种portlet,类型,组
  • 经理姓名(self.manager。姓名完成工作)
  • portlet id(self.data.id完成工作)

所以问题是我如何从它的渲染器中获得这种portlet。

1 个答案:

答案 0 :(得分:1)

portlet类别仅在portlet检索器中可用。您可以通过循环检索器的getPortlets方法来查找它。由于方法返回的信息处理赋值,您需要在渲染器上进行portlet分配(.data),以选择正确的条目:

from zope.component import getMultiAdapter
from plone.portlets.interfaces import IPortletRetriever

# This assumes you have the portlet context and manager as attributes of self,
# like in the renderer:
retriever = getMultiAdapter((self.context, self.manager), IPortletRetriever)
for info in retriever.getPortlets():
     if info['assignment'] is self.data:
          return info['category']