diff --git a/flatfilecms/views/__init__.py b/flatfilecms/views/__init__.py index e69de29..faec57d 100644 --- a/flatfilecms/views/__init__.py +++ b/flatfilecms/views/__init__.py @@ -0,0 +1,9 @@ +from pyramid.httpexceptions import HTTPFound + + +def redirect(self, url): + return HTTPFound(location=url) + + +def set_content_type(self, content_type): + self.request.response.content_type = content_type diff --git a/flatfilecms/views/pages.py b/flatfilecms/views/pages.py index 1064722..c4daa03 100644 --- a/flatfilecms/views/pages.py +++ b/flatfilecms/views/pages.py @@ -39,17 +39,26 @@ class PagesView: if 'view' in self.context.page: r = DottedNameResolver() if isinstance(self.context.page['view'], str): - r.resolve(self.context.page['view'])(self) + response = r.resolve(self.context.page['view'])(self) + if response: + return response + elif isinstance(self.context.page['view'], dict): + for name, options in self.context.page['view'].items(): + response = r.resolve(name)(self, options) + if response: + return response else: for view in self.context.page['view']: if isinstance(view, str): - r.resolve(view)(self) + response = r.resolve(view)(self) + if response: + return response else: - for name, kw in view.items(): - r.resolve(name)(self, **kw) + for name, options in view.items(): + response = r.resolve(name)(self, options) + if response: + return response post = self.context.page - if 'redirect' in post: - return HTTPFound(location=post['redirect']) if 'menu' not in post: post['menu'] = yaml.load( AssetResolver().resolve( @@ -60,10 +69,9 @@ class PagesView: '{0}.jinja2'.format( post.get('template', 'default')), post, - request=self.request + request=self.request, + response=self.request.response ) - if 'content_type' in post: - response.content_type = post['content_type'] return response @view_config(context=Jinja2) diff --git a/tests/pages/view-with-options.md b/tests/pages/view-with-options.md new file mode 100644 index 0000000..552a509 --- /dev/null +++ b/tests/pages/view-with-options.md @@ -0,0 +1,9 @@ +--- +title: Тест одиночного view c опциями +description: Тесты view +template: tests:templates/test_markdown +view: + tests.views.test4: a +--- + +Hello World! diff --git a/tests/test_pages.py b/tests/test_pages.py index f69a87c..708ea21 100644 --- a/tests/test_pages.py +++ b/tests/test_pages.py @@ -49,6 +49,12 @@ def test_view(pages, fake_request, config): assert view.process_yaml().text == 'Hello World! View1' +def test_view_with_options(pages, fake_request, config): + from flatfilecms.views.pages import PagesView + view = PagesView(pages['view-with-options'], fake_request) + assert view.process_yaml().text == 'Hello World! View4(a)' + + def test_views(pages, fake_request, config): from flatfilecms.views.pages import PagesView view = PagesView(pages['views'], fake_request) diff --git a/tests/views.py b/tests/views.py index e08a7d4..0ee34c9 100644 --- a/tests/views.py +++ b/tests/views.py @@ -6,5 +6,11 @@ def test2(self): self.context.page['content'] += ' View2' -def test3(self, **kwargs): - self.context.page['content'] += f" View3(a:{kwargs['a']}, b:{kwargs['b']})" +def test3(self, options): + self.context.page['content'] += \ + f" View3(a:{options['a']}, b:{options['b']})" + + +def test4(self, options): + self.context.page['content'] += \ + f" View4({options})"