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)