Перенос redirect и content_type в view [closes #23]. Может быть полезно для [#11]

master
Антон Касимов 2019-02-24 03:16:38 +03:00
parent 02baa99d89
commit 27a70ed76d
5 changed files with 49 additions and 11 deletions

View File

@ -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

View File

@ -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)

View File

@ -0,0 +1,9 @@
---
title: Тест одиночного view c опциями
description: Тесты view
template: tests:templates/test_markdown
view:
tests.views.test4: a
---
Hello World!

View File

@ -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)

View File

@ -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})"