use target view for adapted object determined by node traverser if available

This commit is contained in:
Helmut Merz 2012-01-24 19:38:51 +01:00
parent 3132fc9947
commit ea1fbc9136
2 changed files with 17 additions and 5 deletions

View file

@ -133,6 +133,7 @@ class BaseView(GenericView, I18NView):
modeName = 'view' modeName = 'view'
def __init__(self, context, request): def __init__(self, context, request):
context = baseObject(context)
super(BaseView, self).__init__(context, request) super(BaseView, self).__init__(context, request)
# TODO: get rid of removeSecurityProxy() call - not yet... # TODO: get rid of removeSecurityProxy() call - not yet...
self.context = removeSecurityProxy(context) self.context = removeSecurityProxy(context)
@ -211,7 +212,7 @@ class BaseView(GenericView, I18NView):
@Lazy @Lazy
def viewAnnotations(self): def viewAnnotations(self):
return self.request.annotations.get('loops.view', {}) return self.request.annotations.setdefault('loops.view', {})
@Lazy @Lazy
def node(self): def node(self):

View file

@ -204,9 +204,8 @@ class NodeView(BaseView):
name = self.request.get('loops.viewName', '') or self.context.viewName name = self.request.get('loops.viewName', '') or self.context.viewName
if name and '?' in name: if name and '?' in name:
name, params = name.split('?', 1) name, params = name.split('?', 1)
ann = self.request.annotations.get('loops.view', {}) ann = self.viewAnnotations
ann['params'] = params ann['params'] = params
self.request.annotations['loops.view'] = ann
if name: if name:
adapter = component.queryMultiAdapter( adapter = component.queryMultiAdapter(
(self.context, self.request), name=name) (self.context, self.request), name=name)
@ -216,10 +215,13 @@ class NodeView(BaseView):
@Lazy @Lazy
def item(self): def item(self):
tv = self.viewAnnotations.get('targetView')
if tv is not None:
return tv
viewName = self.request.get('loops.viewName') or '' viewName = self.request.get('loops.viewName') or ''
# was there a .target... element in the URL? # was there a .target... element in the URL?
#target = self.virtualTargetObject # ignores page even for direktly assignd target #target = self.virtualTargetObject # ignores page even for direktly assignd target
target = self.request.annotations.get('loops.view', {}).get('target') target = self.viewAnnotations.get('target')
if target is not None: if target is not None:
basicView = component.getMultiAdapter((target, self.request), name=viewName) basicView = component.getMultiAdapter((target, self.request), name=viewName)
# xxx: obsolete when self.targetObject is virtual target: # xxx: obsolete when self.targetObject is virtual target:
@ -230,6 +232,9 @@ class NodeView(BaseView):
@Lazy @Lazy
def targetItem(self): def targetItem(self):
tv = self.viewAnnotations.get('targetView')
if tv is not None:
return tv
viewName = self.request.get('loops.viewName') or '' viewName = self.request.get('loops.viewName') or ''
target = self.virtualTargetObject target = self.virtualTargetObject
if target is not None: if target is not None:
@ -400,7 +405,7 @@ class NodeView(BaseView):
@Lazy @Lazy
def virtualTargetObject(self): def virtualTargetObject(self):
target = self.request.annotations.get('loops.view', {}).get('target') target = self.viewAnnotations.get('target')
if target is None: if target is None:
target = self.context.target target = self.context.target
if target is not None: if target is not None:
@ -417,6 +422,9 @@ class NodeView(BaseView):
return None return None
def targetView(self, name='index.html', methodName='show'): def targetView(self, name='index.html', methodName='show'):
tv = self.viewAnnotations.get('targetView')
if tv is not None:
return tv
if '?' in name: if '?' in name:
name, params = name.split('?', 1) name, params = name.split('?', 1)
target = self.virtualTargetObject target = self.virtualTargetObject
@ -462,6 +470,9 @@ class NodeView(BaseView):
@Lazy @Lazy
def virtualTarget(self): def virtualTarget(self):
tv = self.viewAnnotations.get('targetView')
if tv is not None:
return tv
return self.getViewForTarget(self.virtualTargetObject) return self.getViewForTarget(self.virtualTargetObject)
@Lazy @Lazy