View для подбора записей блога [closes #25]
parent
27a70ed76d
commit
b013100831
|
@ -70,7 +70,7 @@ class Folder(dict):
|
|||
def __init__(self, name, parent, path):
|
||||
self.path = path
|
||||
self.name = name
|
||||
self.parent = parent
|
||||
self.__parent__ = parent
|
||||
if parent is not None:
|
||||
self.data_path = parent.data_path
|
||||
for entry in AssetResolver().resolve(path).listdir():
|
||||
|
@ -101,16 +101,17 @@ class Folder(dict):
|
|||
self[path.name] = Folder(path.name, self, asset)
|
||||
|
||||
def walk(self):
|
||||
for item in self.values():
|
||||
yield item
|
||||
for name, item in self.items():
|
||||
yield name, item
|
||||
if isinstance(item, Folder):
|
||||
yield from item.walk()
|
||||
for subname, subitem in item.walk():
|
||||
yield f"{name}/{subname}", subitem
|
||||
|
||||
|
||||
class Document(object):
|
||||
def __init__(self, name, parent, path):
|
||||
self.name = name
|
||||
self.parent = parent
|
||||
self.__parent__ = parent
|
||||
self.path = path
|
||||
self.data_path = parent.data_path
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
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)
|
||||
|
@ -7,3 +9,14 @@ def redirect(self, url):
|
|||
|
||||
def set_content_type(self, 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
|
||||
description: Тест записей блогов
|
||||
template: blogpost
|
||||
published: 2019-02-01
|
||||
---
|
||||
|
||||
Hello World!
|
|
@ -1,3 +1,4 @@
|
|||
title: Блоговая запись 2 в формате YAML
|
||||
template: blogpost
|
||||
published: 2019-02-02
|
||||
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)
|
||||
assert view.process_yaml().text == \
|
||||
'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