From 6f0af6ddbc0f25bffaa80444ac3503273ee8e57b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Thu, 5 Jan 2023 20:41:18 +0100 Subject: [PATCH] finished rss feed --- main/feeds.py | 61 ++++++++++++------- main/models.py | 9 ++- .../templates/main/feed_item_description.html | 2 + main/urls.py | 7 --- 4 files changed, 48 insertions(+), 31 deletions(-) delete mode 100644 main/urls.py diff --git a/main/feeds.py b/main/feeds.py index 5b052f18..5ce0c266 100644 --- a/main/feeds.py +++ b/main/feeds.py @@ -1,76 +1,91 @@ +from datetime import datetime + from django.contrib.syndication.views import Feed -from django.shortcuts import render +from django.template.loader import render_to_string from django.urls import reverse -from main.models import MainArticlesPage, MainArticlePage + +from .models import MainArticlesPage, MainArticlePage + class LatestArticlesFeed(Feed): def get_object( - self: LatestArticlesFeed, + self, request, - title: str + id: int ) -> MainArticlesPage: - return MainArticlesPage.objects.get(title=title) + return MainArticlesPage.objects.get(id=id) def title( - self: LatestArticlesFeed, + self, obj: MainArticlesPage ) -> str: return obj.title def link( - self: LatestArticlesFeed, + self, obj: MainArticlesPage ) -> str: return obj.get_full_url() def description( - self: LatestArticlesFeed, + self, obj: MainArticlesPage ) -> str: return obj.perex def items( - self: LatestArticlesFeed, + self, obj: MainArticlesPage ) -> list: - return obj.get_children().type(MainArticlePage)[:32] + return MainArticlePage.objects.live().child_of(obj)[:32] def item_title( - self: LatestArticlesFeed, - obj: MainArticlePage + self, + item: MainArticlePage ) -> str: - return obj.title + return item.title def item_description( - self: LatestArticlesFeed, + self, item: MainArticlePage - ): - return render( - None, + ) -> str: + return render_to_string( "main/feed_item_description.html", {"item": item}, ) def item_pubdate( - self: LatestArticlesFeed, + self, item: MainArticlePage - ): + ) -> datetime: return item.first_published_at def item_updateddate( - self: LatestArticlesFeed, + self, item: MainArticlePage - ): + ) -> datetime: return item.last_published_at + def item_author_name( + self, + item: MainArticlePage + ) -> str: + if item.author: + return item.author + + if item.author_page.title: + return item_author_page.title + + return "" + def item_categories( - self: LatestArticlesFeed, + self, item: MainArticlePage ) -> list: return item.tags.all() def item_link( - self: LatestArticlesFeed, + self, item: MainArticlePage ) -> str: return item.get_full_url() diff --git a/main/models.py b/main/models.py index 2876ebca..efc8da74 100644 --- a/main/models.py +++ b/main/models.py @@ -4,7 +4,7 @@ from dateutil.relativedelta import relativedelta from django.conf import settings from django.core.paginator import Paginator from django.db import models -from django.http import HttpResponseRedirect, JsonResponse +from django.http import HttpResponseRedirect, HttpResponse, JsonResponse from django.shortcuts import render from django.utils import timezone from modelcluster.contrib.taggit import ClusterTaggableManager @@ -301,6 +301,13 @@ class MainHomePage( return HttpResponseRedirect(self.url) return HttpResponseRedirect(self.url) + @route(r"^feeds/atom/$") + def view_feed(self, request): + # Avoid circular import + from .feeds import LatestArticlesFeed # noqa + + return LatestArticlesFeed()(request, self.articles_page.id) + def _first_subpage_of_type(self, page_type) -> Page or None: try: return self.get_descendants().type(page_type).live().specific()[0] diff --git a/main/templates/main/feed_item_description.html b/main/templates/main/feed_item_description.html index e44f14f7..e01e314b 100644 --- a/main/templates/main/feed_item_description.html +++ b/main/templates/main/feed_item_description.html @@ -1,3 +1,5 @@ +{% load wagtailcore_tags %} + {% for block in item.content %} {% include_block block %} {% endfor %} diff --git a/main/urls.py b/main/urls.py deleted file mode 100644 index 69792634..00000000 --- a/main/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.urls import path -from main.feeds import LatestArticlesFeed - - -urlpatterns = [ - path('feed', LatestArticlesFeed()), -] -- GitLab