我有一个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>
您可以通过查看以下内容来检查HTTP请求对象中的激活层: 请按self.request。提供。 iro 。图层从零开始评估 索引(最高优先级)最后一个索引(最低优先级)。 (source)
所以,问题是如何确定层的优先级?
答案 0 :(得分:2)
答案 1 :(得分:2)
另一种方法是,在同一浏览器层上使用ZCML-Override。 这也应该覆盖原始图层,但是对原始图层进行子类化的解决方案有点好;)。