Skip to content
Snippets Groups Projects
Commit 6f0af6dd authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

finished rss feed

parent 93af939f
Branches
No related tags found
2 merge requests!690Release,!689Add RSS feed to main website
Pipeline #10942 passed
from datetime import datetime
from django.contrib.syndication.views import Feed 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 django.urls import reverse
from main.models import MainArticlesPage, MainArticlePage
from .models import MainArticlesPage, MainArticlePage
class LatestArticlesFeed(Feed): class LatestArticlesFeed(Feed):
def get_object( def get_object(
self: LatestArticlesFeed, self,
request, request,
title: str id: int
) -> MainArticlesPage: ) -> MainArticlesPage:
return MainArticlesPage.objects.get(title=title) return MainArticlesPage.objects.get(id=id)
def title( def title(
self: LatestArticlesFeed, self,
obj: MainArticlesPage obj: MainArticlesPage
) -> str: ) -> str:
return obj.title return obj.title
def link( def link(
self: LatestArticlesFeed, self,
obj: MainArticlesPage obj: MainArticlesPage
) -> str: ) -> str:
return obj.get_full_url() return obj.get_full_url()
def description( def description(
self: LatestArticlesFeed, self,
obj: MainArticlesPage obj: MainArticlesPage
) -> str: ) -> str:
return obj.perex return obj.perex
def items( def items(
self: LatestArticlesFeed, self,
obj: MainArticlesPage obj: MainArticlesPage
) -> list: ) -> list:
return obj.get_children().type(MainArticlePage)[:32] return MainArticlePage.objects.live().child_of(obj)[:32]
def item_title( def item_title(
self: LatestArticlesFeed, self,
obj: MainArticlePage item: MainArticlePage
) -> str: ) -> str:
return obj.title return item.title
def item_description( def item_description(
self: LatestArticlesFeed, self,
item: MainArticlePage item: MainArticlePage
): ) -> str:
return render( return render_to_string(
None,
"main/feed_item_description.html", "main/feed_item_description.html",
{"item": item}, {"item": item},
) )
def item_pubdate( def item_pubdate(
self: LatestArticlesFeed, self,
item: MainArticlePage item: MainArticlePage
): ) -> datetime:
return item.first_published_at return item.first_published_at
def item_updateddate( def item_updateddate(
self: LatestArticlesFeed, self,
item: MainArticlePage item: MainArticlePage
): ) -> datetime:
return item.last_published_at 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( def item_categories(
self: LatestArticlesFeed, self,
item: MainArticlePage item: MainArticlePage
) -> list: ) -> list:
return item.tags.all() return item.tags.all()
def item_link( def item_link(
self: LatestArticlesFeed, self,
item: MainArticlePage item: MainArticlePage
) -> str: ) -> str:
return item.get_full_url() return item.get_full_url()
...@@ -4,7 +4,7 @@ from dateutil.relativedelta import relativedelta ...@@ -4,7 +4,7 @@ from dateutil.relativedelta import relativedelta
from django.conf import settings from django.conf import settings
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db import models 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.shortcuts import render
from django.utils import timezone from django.utils import timezone
from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.contrib.taggit import ClusterTaggableManager
...@@ -301,6 +301,13 @@ class MainHomePage( ...@@ -301,6 +301,13 @@ class MainHomePage(
return HttpResponseRedirect(self.url) return HttpResponseRedirect(self.url)
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: def _first_subpage_of_type(self, page_type) -> Page or None:
try: try:
return self.get_descendants().type(page_type).live().specific()[0] return self.get_descendants().type(page_type).live().specific()[0]
......
{% load wagtailcore_tags %}
{% for block in item.content %} {% for block in item.content %}
{% include_block block %} {% include_block block %}
{% endfor %} {% endfor %}
from django.urls import path
from main.feeds import LatestArticlesFeed
urlpatterns = [
path('feed', LatestArticlesFeed()),
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment