]> git.ipfire.org Git - ipfire.org.git/commitdiff
blog: Allow browing posts by tag
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Jul 2018 21:59:24 +0000 (22:59 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 17 Jul 2018 21:59:24 +0000 (22:59 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/backend/blog.py
src/templates/blog/tag.html [new file with mode: 0644]
src/web/__init__.py
src/web/blog.py

index 550fba37a1b57537572025eb2914eccf8d616341..8b9d93bb4d1b018dbb48870a36d9f45cc1b6df14 100644 (file)
@@ -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
 
index f0044c89230767a40d63615265c3d2401dbdfd2a..d54565f9e0d78a40f219110615eebe382c3514ac 100644 (file)
@@ -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 (file)
index 0000000..c956111
--- /dev/null
@@ -0,0 +1,11 @@
+{% extends "base.html" %}
+
+{% block title %}{{ _("Posts tagged with '%s'") % tag }}{% end block %}
+
+{% block main %}
+       <div class="card">
+               <div class="card-body">
+                       {% module BlogPosts(posts) %}
+               </div>
+       </div>
+{% end block %}
index 12fc732033ba050c76f0c17f6fba85d909251f88..48590ab57f28dc2c3d6b46903fc978958ec1f7f0 100644 (file)
@@ -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),
index f297fdbb729050a5096879e6cbfbc63f23ffc40a..52540721a419e0decb5e1b5181689d57dafcefad 100644 (file)
@@ -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)