From 4bde7f18a946e9ddca2199d9c23ee70efca4b32b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 17 Jul 2018 22:59:24 +0100 Subject: [PATCH] blog: Allow browing posts by tag Signed-off-by: Michael Tremer --- Makefile.am | 3 ++- src/backend/blog.py | 2 +- src/templates/blog/tag.html | 11 +++++++++++ src/web/__init__.py | 1 + src/web/blog.py | 9 +++++++++ 5 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/templates/blog/tag.html diff --git a/Makefile.am b/Makefile.am index 550fba37..8b9d93bb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -111,7 +111,8 @@ templates_blog_DATA = \ src/templates/blog/feed.xml \ src/templates/blog/index.html \ src/templates/blog/post.html \ - src/templates/blog/search-results.html + src/templates/blog/search-results.html \ + src/templates/blog/tag.html templates_blogdir = $(templatesdir)/blog diff --git a/src/backend/blog.py b/src/backend/blog.py index f0044c89..d54565f9 100644 --- a/src/backend/blog.py +++ b/src/backend/blog.py @@ -30,7 +30,7 @@ class Blog(misc.Object): WHERE published_at IS NOT NULL \ AND published_at <= NOW() \ AND %s = ANY(tags) \ - ORDER BY published_at DESC LIMIT %s", limit) + ORDER BY published_at DESC LIMIT %s", tag, limit) def get_by_author(self, uid, limit=None): return self._get_posts("SELECT * FROM blog \ diff --git a/src/templates/blog/tag.html b/src/templates/blog/tag.html new file mode 100644 index 00000000..c9561113 --- /dev/null +++ b/src/templates/blog/tag.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block title %}{{ _("Posts tagged with '%s'") % tag }}{% end block %} + +{% block main %} +
+
+ {% module BlogPosts(posts) %} +
+
+{% end block %} diff --git a/src/web/__init__.py b/src/web/__init__.py index 12fc7320..48590ab5 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -120,6 +120,7 @@ class Application(tornado.web.Application): (r"/authors/(\w+)", blog.AuthorHandler), (r"/post/(.*)", blog.PostHandler), (r"/search", blog.SearchHandler), + (r"/tags/([0-9a-z\-]+)", blog.TagHandler), # RSS Feed (r"/feed.xml", blog.FeedHandler), diff --git a/src/web/blog.py b/src/web/blog.py index f297fdbb..52540721 100644 --- a/src/web/blog.py +++ b/src/web/blog.py @@ -71,6 +71,15 @@ class SearchHandler(base.BaseHandler): self.render("blog/search-results.html", q=q, posts=posts) +class TagHandler(base.BaseHandler): + def get(self, tag): + posts = self.backend.blog.get_by_tag(tag) + if not posts: + raise tornado.web.HTTPError(404, "There are no posts with tag: %s" % tag) + + self.render("blog/tag.html", posts=posts, tag=tag) + + class PostModule(ui_modules.UIModule): def render(self, post): return self.render_string("blog/modules/post.html", post=post) -- 2.39.5