覆盖视图(来自其他包),修复浏览器层优先级

Override view (from other package), fix browser layers priority

我有一个 other.package 注册视图 my_view。然后我试图用我的 this.package.

中定义的视图替换此视图
  <browser:page
    for="other.package.interfaces.IBarClass"
    name="my_view"
    class="this.package.views.FooClass"
    permission="zope2.View"
    layer="this.package.interfaces.IThisPackageContentLayer"
    />

出于某种原因 my_view 未被覆盖。我认为它可能与图层优先级有关,但我不知道如何解决它。有什么建议吗?

如果我重命名视图 (name="my_view_new"),它会按预期工作。但如果使用相同的名字,原来的似乎有优先权。我该如何更改?

更新: 关于图层优先级:

(Pdb) self.request.__provides__.__iro__[13]
<InterfaceClass other.package.interfaces.layer.IOriginalLayer>
(Pdb) self.request.__provides__.__iro__[14]
<InterfaceClass this.package.content.interfaces.IThisPackageContentLayer>

You can check the activated layers from HTTP request object by looking at self.request.provides.iro. Layers are evaluated from zero index (highest priority) the last index (lowest priority). (source)

所以,问题是我如何确定图层的优先级?

问题已通过以这种方式固定图层的优先级得到解决:

class IThisPackageContentLayer(IOriginalLayer):

按照建议 here

另一种方法是,对同一浏览器层使用 ZCML-Overrides。 这也应该覆盖原始层,但是对原始层进行子类化的解决方案有点不错;)。