diff --git a/layout/browser/base.py b/layout/browser/base.py index 4a35217..a52cb3a 100644 --- a/layout/browser/base.py +++ b/layout/browser/base.py @@ -28,6 +28,7 @@ from zope.app.security.interfaces import IUnauthenticatedPrincipal from zope import component from zope.cachedescriptors.property import Lazy from zope.proxy import removeAllProxies +from zope.security.proxy import removeSecurityProxy from zope.traversing.browser import absoluteURL from loops.common import adapted @@ -38,9 +39,17 @@ from loops import util class BaseView(object): def __init__(self, context, request): - self.context = context # this is the adapted concept! + self.context = removeSecurityProxy(context) # this is the adapted concept! self.request = request + @Lazy + def viewAnnotations(self): + return self.request.annotations.get('loops.view', {}) + + @Lazy + def virtualTarget(self): + return self.viewAnnotations.get('target') + @Lazy def title(self): return self.context.title diff --git a/layout/browser/concept.py b/layout/browser/concept.py index 563d6c4..764ac13 100644 --- a/layout/browser/concept.py +++ b/layout/browser/concept.py @@ -41,6 +41,7 @@ class ConceptView(BaseView): @property def children(self): for c in self.context.getChildren(): + a = adapted(c) view = component.getMultiAdapter((c, self.request), name='layout') view.node = self.node yield view