Ejemplo n.º 1
0
    def __call__(self, layout=None, view=None, *args, **kw):
        if view is None:
            view = self.view
        self.mainview = view
        self.maincontext = view.context

        layoutview = self.view
        if layout is not None:
            self.view = layout

        self.update()

        if self.layout is None:
            return self.render()

        if self.__name__ != self.layout:
            layout = queryLayout(
                view, self.request, view.__parent__, name=self.layout)
            if layout is not None:
                return layout(layout=self, view=view, *args, **kw)
        else:
            context = self.context
            if layoutview.context is not context.__parent__:
                context = context.__parent__
            else:
                context = getattr(context.__parent__, '__parent__', None)

            if context is None:
                context = getRoot(self.context)

            layout = queryLayout(self, self.request, context, name=self.layout)
            if layout is not None:
                return layout(view=view, *args, **kw)

        layout = queryLayout(
            self.view, self.context, self.request, name=self.layout)

        if layout is not None:
            return layout(*args, **kw)

        raise LayoutNotFound(self.layout)
Ejemplo n.º 2
0
    def __call__(self, *args, **kw):
        if self.request._traversed_names[-1] != '':
            self.request._traversed_names.append('')

        response = self.request.response
        if self.isRedirected or response.getStatus() in (302, 303):
            return u''

        layout = queryLayout(
            self, self.request, self.__parent__, name=self.layoutname)
        if layout is None:
            return self.render()
        else:
            return layout()