View для подбора записей блога [closes #25]
parent
27a70ed76d
commit
b013100831
|
@ -70,7 +70,7 @@ class Folder(dict):
|
||||||
def __init__(self, name, parent, path):
|
def __init__(self, name, parent, path):
|
||||||
self.path = path
|
self.path = path
|
||||||
self.name = name
|
self.name = name
|
||||||
self.parent = parent
|
self.__parent__ = parent
|
||||||
if parent is not None:
|
if parent is not None:
|
||||||
self.data_path = parent.data_path
|
self.data_path = parent.data_path
|
||||||
for entry in AssetResolver().resolve(path).listdir():
|
for entry in AssetResolver().resolve(path).listdir():
|
||||||
|
@ -101,16 +101,17 @@ class Folder(dict):
|
||||||
self[path.name] = Folder(path.name, self, asset)
|
self[path.name] = Folder(path.name, self, asset)
|
||||||
|
|
||||||
def walk(self):
|
def walk(self):
|
||||||
for item in self.values():
|
for name, item in self.items():
|
||||||
yield item
|
yield name, item
|
||||||
if isinstance(item, Folder):
|
if isinstance(item, Folder):
|
||||||
yield from item.walk()
|
for subname, subitem in item.walk():
|
||||||
|
yield f"{name}/{subname}", subitem
|
||||||
|
|
||||||
|
|
||||||
class Document(object):
|
class Document(object):
|
||||||
def __init__(self, name, parent, path):
|
def __init__(self, name, parent, path):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.parent = parent
|
self.__parent__ = parent
|
||||||
self.path = path
|
self.path = path
|
||||||
self.data_path = parent.data_path
|
self.data_path = parent.data_path
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
from pyramid.httpexceptions import HTTPFound
|
from pyramid.httpexceptions import HTTPFound
|
||||||
|
from pyramid.traversal import (find_root, find_resource)
|
||||||
|
|
||||||
|
from flatfilecms.models import (YAML, Markdown)
|
||||||
|
|
||||||
def redirect(self, url):
|
def redirect(self, url):
|
||||||
return HTTPFound(location=url)
|
return HTTPFound(location=url)
|
||||||
|
@ -7,3 +9,14 @@ def redirect(self, url):
|
||||||
|
|
||||||
def set_content_type(self, content_type):
|
def set_content_type(self, content_type):
|
||||||
self.request.response.content_type = content_type
|
self.request.response.content_type = content_type
|
||||||
|
|
||||||
|
|
||||||
|
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'])
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: Блоговая запись 1 в формате markdown
|
title: Блоговая запись 1 в формате markdown
|
||||||
description: Тест записей блогов
|
description: Тест записей блогов
|
||||||
template: blogpost
|
template: blogpost
|
||||||
|
published: 2019-02-01
|
||||||
---
|
---
|
||||||
|
|
||||||
Hello World!
|
Hello World!
|
|
@ -1,3 +1,4 @@
|
||||||
title: Блоговая запись 2 в формате YAML
|
title: Блоговая запись 2 в формате YAML
|
||||||
template: blogpost
|
template: blogpost
|
||||||
|
published: 2019-02-02
|
||||||
content: Hello World! 2
|
content: Hello World! 2
|
|
@ -0,0 +1,4 @@
|
||||||
|
view:
|
||||||
|
- flatfilecms.views.blog:
|
||||||
|
base: /blog
|
||||||
|
template: bloglist
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
title: Не блоговая запись
|
||||||
|
description: Тест записей блогов
|
||||||
|
template: blogpost
|
||||||
|
---
|
||||||
|
|
||||||
|
Hello World!
|
|
@ -60,3 +60,16 @@ def test_views(pages, fake_request, config):
|
||||||
view = PagesView(pages['views'], fake_request)
|
view = PagesView(pages['views'], fake_request)
|
||||||
assert view.process_yaml().text == \
|
assert view.process_yaml().text == \
|
||||||
'Hello World! View1 View2 View3(a:1, b:2)'
|
'Hello World! View1 View2 View3(a:1, b:2)'
|
||||||
|
|
||||||
|
|
||||||
|
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'
|
||||||
|
|
||||||
|
|
Reference in New Issue