处理Plone中的隐式获取问题

时间:2012-08-01 06:48:09

标签: plone

在Plone中,在视图类实例中添加成员变量会自动使其成为视图获取链的一部分。这里详细描述了这个问题:

http://collective-docs.readthedocs.org/en/latest/views/browserviews.html#views-and-automatic-member-variable-acquisition-wrapping

处理此问题的建议方法是什么

  • 我们是否可以使用基于Plone主模板的视图而无需隐式获取

  • 那么Viewlets和portlet渲染器呢?

  • 如果不是......应该如何解决问题,以便self.xxx变量不会获得额外的采集包装?

1 个答案:

答案 0 :(得分:3)

使用Acquisition.aq_inner()去掉额外的包装并将对象恢复到原始路径。请不要使用您链接到的文档中描述的单项列表方法。

要显示链接文档中的一个示例,但已使用aq_inner()进行了更正:

from Acquisition import aq_inner

self.obj = self.context.reference_catalog.lookupObject(value)
return aq_inner(self.obj).absolute_url() # Acquistion chain corrected

或者,您可以使用aq_inner属性:

self.obj = self.context.reference_catalog.lookupObject(value)
return self.obj.aq_inner.absolute_url() # Acquistion chain corrected

但仅适用于继承自Acquisition.ExplicitAcquisition.Implicit的对象; aq_inner()函数如果不是Acquisition-wrapped对象,则逐字返回传递的参数。