From 07c77500e47295d76820ca7941496c2d6e42fa1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=9A=D0=B0=D1=81=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Mon, 4 Mar 2019 19:49:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B1=D0=BB=D0=BE=D0=B3=D0=B0.=20[closes=20#3]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flatfilecms/templates/blogposts.jinja2 | 17 +++++++++++++-- flatfilecms/views/__init__.py | 29 +++++++++++++++++++++++--- tests/templates/bloglist.jinja2 | 1 + tests/test_pages.py | 11 ++++------ 4 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 tests/templates/bloglist.jinja2 diff --git a/flatfilecms/templates/blogposts.jinja2 b/flatfilecms/templates/blogposts.jinja2 index 68d61d5..1aaa1cb 100644 --- a/flatfilecms/templates/blogposts.jinja2 +++ b/flatfilecms/templates/blogposts.jinja2 @@ -1,7 +1,20 @@ {% extends "layout.jinja2" %} {% if header_class is not defined %}{% set header_class="light" %}{%endif%} {% block content %} -{% for item in request.root.walk()|selectattr("page") if item.page[] %} -{{ item }} +
+{% for item in pages %} +
+{%- if item[1].page['image'] %}{% endif %} +
+

{{item[1].page['title']}}

+{%- if item[1].page['description'] %}

{{item[1].page['description']}}

{% endif %} +Читать +
+ +
{% endfor %} +
{% endblock %} diff --git a/flatfilecms/views/__init__.py b/flatfilecms/views/__init__.py index a6a2aa7..82c4518 100644 --- a/flatfilecms/views/__init__.py +++ b/flatfilecms/views/__init__.py @@ -1,8 +1,14 @@ +import yaml +from pyramid.renderers import render_to_response +from pyramid.path import AssetResolver +from pathlib import PurePath +from flatfilecms.models import LoaderFactory from pyramid.httpexceptions import HTTPFound from pyramid.traversal import (find_root, find_resource) from flatfilecms.models import (YAML, Markdown) + def redirect(self, url): return HTTPFound(location=url) @@ -11,12 +17,29 @@ def set_content_type(self, content_type): self.request.response.content_type = content_type -def blog(self, options): - path = options.get('base', '/') +def blog(self, options={}): + path = options.get('base', '') root = find_root(self.context) tree = find_resource(root, path) postlist = [] for name, item in tree.walk(): if isinstance(item, (YAML, Markdown)) and 'published' in item.page: postlist.append((f"{path}/{name}", item)) - self.pages = sorted(postlist, key=lambda t: t[1].page['published']) + post = self.context.page.copy() + post['pages'] = sorted( + postlist, + key=lambda t: t[1].page['published'], + reverse=True) + if 'menu' not in post: + post['menu'] = yaml.load( + AssetResolver().resolve( + str(PurePath(self.context.data_path) / + 'menu/default.yaml')).stream(), + LoaderFactory(self.context.data_path)) + return render_to_response( + '{0}.jinja2'.format( + post.get('template', 'blogposts')), + post, + request=self.request, + response=self.request.response + ) diff --git a/tests/templates/bloglist.jinja2 b/tests/templates/bloglist.jinja2 new file mode 100644 index 0000000..717c056 --- /dev/null +++ b/tests/templates/bloglist.jinja2 @@ -0,0 +1 @@ +{% for item in pages %}{{item[0]}} {% endfor %} diff --git a/tests/test_pages.py b/tests/test_pages.py index bd1d2d2..554ce2e 100644 --- a/tests/test_pages.py +++ b/tests/test_pages.py @@ -26,6 +26,8 @@ def config(current_directory): from pyramid.testing import testConfig with testConfig() as config: config.include('pyramid_jinja2') + config.add_jinja2_search_path('tests:templates') + config.add_jinja2_search_path('flatfilecms:templates') yield config @@ -66,10 +68,5 @@ def test_blogindex(pages, fake_request, config): from flatfilecms.views import blog from flatfilecms.views.pages import PagesView fake_view_object = PagesView(pages['blog']['index'], fake_request) - blog(fake_view_object, {'base': '/blog'}) - assert hasattr(fake_view_object, 'pages') - assert isinstance(fake_view_object.pages, list) - assert len(fake_view_object.pages) == 2 - assert fake_view_object.pages[0][0] == '/blog/blogpost1' and \ - fake_view_object.pages[1][0] == '/blog/blogpost2' - + response = blog(fake_view_object, {'base': '/blog'}) + assert response.text == '/blog/blogpost2 /blog/blogpost1 '