diff --git a/flatfilecms/templates/atom.jinja2 b/flatfilecms/templates/atom.jinja2 new file mode 100644 index 0000000..43c13ac --- /dev/null +++ b/flatfilecms/templates/atom.jinja2 @@ -0,0 +1,38 @@ + + + {{title}} + {%- if subtitle %} + {{subtitle}} + {%- endif %} + + {%- if alternate %} + + {%- endif %} + {{(pages[0][1].page['updated'] or pages[0][1].page['published']).isoformat()}}+00:00 + urn:uuid:{{id}} + + {{author['name']}} + + {%- if category %} + + {%- endif %} + flatfilecms + {%- for item in pages %} + + {{item[1].page['title']}} + + urn:uuid:{{item[1].page['id']}} + {{(item[1].page['updated'] or item[1].page['published']).isoformat()}}+00:00 + {{item[1].page['published'].isoformat()}}+00:00 + {{item[1].page['summary'] or item[1].page['description']}} + {%- if item[1].page['author'] %} + + {{item[1].page['author']['name']}} + + {%- endif %} + {%- if item[1].page['category'] %} + + {%- endif %} + + {%- endfor %} + diff --git a/flatfilecms/templates/base.jinja2 b/flatfilecms/templates/base.jinja2 index f4304cd..07b5fb6 100644 --- a/flatfilecms/templates/base.jinja2 +++ b/flatfilecms/templates/base.jinja2 @@ -12,6 +12,9 @@ {% if amphtml is defined -%} {% endif -%} + {% for link in alternate -%} + + {% endfor -%} {{title}} {% block links %} {%- endblock %} diff --git a/flatfilecms/templates/blogposts.jinja2 b/flatfilecms/templates/blogposts.jinja2 index 1aaa1cb..d7a8a05 100644 --- a/flatfilecms/templates/blogposts.jinja2 +++ b/flatfilecms/templates/blogposts.jinja2 @@ -17,4 +17,8 @@ {% endfor %} +{% set atom_feed = alternate|selectattr('type', 'equalto', 'application/atom+xml')|first -%} +{% if atom_feed -%} +

Подписаться на обновления:

+{% endif -%} {% endblock %} diff --git a/flatfilecms/views/__init__.py b/flatfilecms/views/__init__.py index 82c4518..d671002 100644 --- a/flatfilecms/views/__init__.py +++ b/flatfilecms/views/__init__.py @@ -19,6 +19,7 @@ def set_content_type(self, content_type): def blog(self, options={}): path = options.get('base', '') + format = options.get('format', 'blogposts') root = find_root(self.context) tree = find_resource(root, path) postlist = [] @@ -27,19 +28,17 @@ def blog(self, options={}): postlist.append((f"{path}/{name}", item)) post = self.context.page.copy() post['pages'] = sorted( - postlist, - key=lambda t: t[1].page['published'], - reverse=True) + 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 - ) + if format == 'atom': + set_content_type(self, 'application/atom+xml') + return render_to_response( + '{0}.jinja2'.format(post.get('template', format)), + post, + request=self.request, + response=self.request.response)