Plone中视点内隐习得问题的处理

Plone中视点内隐习得问题的处理,plone,Plone,在Plone中,在视图类实例中添加成员变量会自动使其成为视图获取链的一部分。此处详细描述了该问题: 处理这个问题的建议方法是什么 我们可以在没有隐式获取的情况下使用一个基于主模板的视图吗 那么Viewlet和portlet呈现器呢 如果不是。。。如何处理该问题,以使self.xxx变量不会获得额外的采集包装 使用Acquisition.aq_inner()去除多余的包装并将对象恢复到其原始路径。请不要使用链接到的文档中描述的单一项目列表方法 要显示链接文档中的一个示例,但已用aq_inner

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

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

  • 我们可以在没有隐式获取的情况下使用一个基于主模板的视图吗

  • 那么Viewlet和portlet呈现器呢

  • 如果不是。。。如何处理该问题,以使self.xxx变量不会获得额外的采集包装


使用
Acquisition.aq_inner()
去除多余的包装并将对象恢复到其原始路径。请不要使用链接到的文档中描述的单一项目列表方法

要显示链接文档中的一个示例,但已用
aq_inner()
更正,请执行以下操作:

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

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.aq_inner()
去除额外包装,并将对象恢复到其原始路径。请不要使用链接到的文档中描述的单一项目列表方法

要显示链接文档中的一个示例,但已用
aq_inner()
更正,请执行以下操作:

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

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

但这只适用于继承自
Acquisition.Explicit
Acquisition.Implicit
的对象;如果传递的参数不是采集包装对象,则
aq_inner()
函数将逐字返回传递的参数。

更新了文档。谢谢我知道一定有更好的办法。一些Plone coreish插件中使用了列表方法。更新了文档。谢谢我知道一定有更好的办法。列表方法在某个Plone coreish插件中使用。您使用的是什么视图类?从Zope2.12 Products.Five.BrowserView开始,Acquisition.Explicit不再是Acquisition.Explicit的子类,因此我认为不应该发生这种情况。但是,也许您正在使用另一个视图类,或者我忘记了一些事情……Viewlet和Portlet是否也适用于此?您正在使用哪个视图类?从Zope2.12 Products.Five.BrowserView开始,Acquisition.Explicit不再是Acquisition.Explicit的子类,因此我认为不应该发生这种情况。但是,也许您正在使用另一个视图类,或者我忘记了一些事情……Viewlet和Portlet是否也一样?