在Plone中,在视图类实例中添加成员变量会自动使其成为视图获取链的一部分。这里详细描述了这个问题:
处理此问题的建议方法是什么
我们是否可以使用基于Plone主模板的视图而无需隐式获取
那么Viewlets和portlet渲染器呢?
如果不是......应该如何解决问题,以便self.xxx变量不会获得额外的采集包装?
答案 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.Explicit
或Acquisition.Implicit
的对象; aq_inner()
函数如果不是Acquisition-wrapped对象,则逐字返回传递的参数。