From cf1b2af3252d4aac51389f3b8bbb4c47d20c6a64 Mon Sep 17 00:00:00 2001 From: Gabriel Augendre Date: Thu, 4 Mar 2021 18:48:48 +0100 Subject: [PATCH] Add feed for tags --- articles/models.py | 2 +- articles/urls.py | 1 + articles/views/feeds.py | 18 +++++++++++++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/articles/models.py b/articles/models.py index 99c314d..f65c339 100644 --- a/articles/models.py +++ b/articles/models.py @@ -60,7 +60,7 @@ class Article(models.Model): ordering = ["-published_at"] def __str__(self): - return f"{self.title}" + return self.title def get_absolute_url(self): return reverse("article-detail", kwargs={"slug": self.slug}) diff --git a/articles/urls.py b/articles/urls.py index 7ca1683..ea5c851 100644 --- a/articles/urls.py +++ b/articles/urls.py @@ -6,6 +6,7 @@ urlpatterns = [ path("", html.ArticlesListView.as_view(), name="articles-list"), path("drafts/", html.DraftsListView.as_view(), name="drafts-list"), path("search/", html.SearchArticlesListView.as_view(), name="search"), + path("tag//feed/", feeds.TagFeed(), name="tag-feed"), path("tag//", html.TagArticlesListView.as_view(), name="tag"), path("feed/", feeds.CompleteFeed(), name="complete-feed"), path("api/render//", api.render_article, name="api-render-article"), diff --git a/articles/views/feeds.py b/articles/views/feeds.py index 6775409..c66bb3f 100644 --- a/articles/views/feeds.py +++ b/articles/views/feeds.py @@ -1,6 +1,6 @@ from django.contrib.syndication.views import Feed -from articles.models import Article +from articles.models import Article, Tag from blog import settings @@ -10,16 +10,24 @@ class CompleteFeed(Feed): link = settings.BLOG["base_url"] description = settings.BLOG["description"] - def items(self): + def get_queryset(self, obj): return Article.objects.filter(status=Article.PUBLISHED).order_by( "-published_at" - )[: self.FEED_LIMIT] + ) - def item_title(self, item: Article): - return item.title + def items(self, obj): + return self.get_queryset(obj)[: self.FEED_LIMIT] def item_description(self, item: Article): return item.get_formatted_content def item_pubdate(self, item: Article): return item.published_at + + +class TagFeed(CompleteFeed): + def get_object(self, request, *args, **kwargs): + return Tag.objects.get(slug=kwargs.get("slug")) + + def get_queryset(self, tag): + return super().get_queryset(tag).filter(tags=tag)