Переопределить вид (из другого пакета), исправить приоритет слоев браузера - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 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. обеспечивает . иро .Слои оцениваются от нулевого индекса (самый высокий приоритет) до последнего индекса (самый низкий приоритет). (источник)

Итак, проблема в том, как я могу расставить приоритеты для слоя?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Другой способ - использовать ZCML-переопределения с тем же слоем браузера.Это также должно переопределить оригинал, но решение с подклассификацией исходного слоя немного приятно;).

0 голосов
/ 05 октября 2018

Проблема была решена путем установки приоритета слоев следующим образом:

class IThisPackageContentLayer(IOriginalLayer):

, как предлагается здесь .

...