diff --git a/main/feeds.py b/main/feeds.py index 5b052f185a66e381824470cd2244200cec24f292..5ce0c26620ab7160f3b3a3da4f9db59ad0a85daf 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 2876ebcae59491d1d69dfd7286fe6479fe6ff2fd..efc8da74f8c4433dddc39ed975c39c5fcafa87a7 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 e44f14f74b25f545705ed5a3431fb4c89d3b325a..e01e314b9b46f64db02e3bdfa6d0a98fe84ddfd0 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 69792634cfc651626b12cb75d89c0318c1a8bdf4..0000000000000000000000000000000000000000 --- a/main/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.urls import path -from main.feeds import LatestArticlesFeed - - -urlpatterns = [ - path('feed', LatestArticlesFeed()), -]