Plone 如何获得所有注册';浏览器:资源';在普隆
如何从组件注册表获取所有注册的Plone 如何获得所有注册';浏览器:资源';在普隆,plone,Plone,如何从组件注册表获取所有注册的browser:resource和browser:resourceDirectory 我在不同的地方寻找,试图发现zcml指令browser:resource创建了什么类型的组件,并找到了产品.Five.browser.metaconfigure和registerAdapter调用: handler('registerAdapter', factory, (layer,), Interface, name, _context.info) 这意味着它将注册一个适配器
browser:resource
和browser:resourceDirectory
我在不同的地方寻找,试图发现zcml指令browser:resource
创建了什么类型的组件,并找到了产品.Five.browser.metaconfigure
和registerAdapter
调用:
handler('registerAdapter', factory, (layer,), Interface, name, _context.info)
这意味着它将注册一个适配器,该适配器需要(层,)
,并提供接口
,但调用以下命令无效(它返回的组件不是浏览器资源):
我不确定,但似乎getAdapters
需要一个实例。我不想查询zope.component,而是想获得注册的适配器
我在
zope.interface.interfaces
中找到了一个方法lookupAll(必需的,提供的)
,它看起来像我想要的,但我找不到它的实现位置,所以我不知道如何调用它。zope.component.getAdapters()
确实需要传递一个实例。电话:
其中providedBy
是zope.interface.declarations.providedBy()
。IDefaultBrowserLayer
提供的全部功能是zope.interface.i接口
和zope.interface.i规范
您需要传入一个提供IDefaultBrowserLayer
的虚拟对象,而不是直接传入接口
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
import zope.component
import zope.interface
class dummy(object):
zope.interface.classProvides(IDefaultBrowserLayer)
zope.component.getAdapters((dummy,), zope.interface.Interface)
它可以工作,但不能提取所有资源。这是我根据你的回答写的剧本:你能看一下吗?许多适配器在getToolByName portal_成员身份上失败,因为虚拟对象不是内容。(这是指stringterp适配器,但我想这是为了额外的适配器(不是为了资源)你的方法看起来是正确的;我只有代码风格的注释;松开所有的
pass
语句,在StopIteration
上使用和break
,我不会对try
使用套件,只需删除该代码块即可。
list(map(providedBy, objects))
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
import zope.component
import zope.interface
class dummy(object):
zope.interface.classProvides(IDefaultBrowserLayer)
zope.component.getAdapters((dummy,), zope.interface.Interface)