directly call target view from node view if target view is marked as top-level

This commit is contained in:
Helmut Merz 2012-01-28 19:51:12 +01:00
parent b686716754
commit 2a7a5f8a1d
2 changed files with 9 additions and 1 deletions

View file

@ -131,6 +131,7 @@ class BaseView(GenericView, I18NView):
actions = {}
icon = None
modeName = 'view'
isToplevel = False
def __init__(self, context, request):
context = baseObject(context)

View file

@ -83,6 +83,13 @@ class NodeView(BaseView):
viewConfig = getViewConfiguration(context, request)
self.setSkin(viewConfig.get('skinName'))
def __call__(self, *args, **kw):
tv = self.viewAnnotations.get('targetView')
if tv is not None:
if tv.isToplevel:
return tv(*args, **kw)
return super(NodeView, self).__call__(*args, **kw)
@Lazy
def macro(self):
return self.template.macros['content']
@ -424,7 +431,7 @@ class NodeView(BaseView):
def targetView(self, name='index.html', methodName='show'):
tv = self.viewAnnotations.get('targetView')
if tv is not None:
return tv
return tv()
if '?' in name:
name, params = name.split('?', 1)
target = self.virtualTargetObject