diff --git a/browser/concept.py b/browser/concept.py index 188c383..2357c12 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -333,24 +333,29 @@ class ConceptView(BaseView): @Lazy def view(self): context = self.context - viewName = self.request.get('loops.viewName') or getattr(self, '_viewName', None) - if not viewName: + name = self.request.get('loops.viewName') or getattr(self, '_viewName', None) + if not name: ti = IType(context).typeInterface # TODO: check the interface (maybe for a base interface IViewProvider) # instead of the viewName attribute: if ti and ti != ITypeConcept and 'viewName' in ti: typeAdapter = ti(self.context) - viewName = typeAdapter.viewName - if not viewName: + name = typeAdapter.viewName + if not name: tp = IType(context).typeProvider if tp: - viewName = ITypeConcept(tp).viewName - if viewName: + name = ITypeConcept(tp).viewName + if name: + if '?' in name: + name, params = name.split('?', 1) + ann = self.request.annotations.get('loops.view', {}) + ann['params'] = params + self.request.annotations['loops.view'] = ann # ??? Would it make sense to use a somehow restricted interface # that should be provided by the view like IQuery? #viewInterface = getattr(typeAdapter, 'viewInterface', None) or IQuery adapter = component.queryMultiAdapter((context, self.request), - name=viewName) + name=name) if adapter is not None: return adapter #elif type provides view: use this