diff --git a/opentech/public/news/models.py b/opentech/public/news/models.py index b3871fdf19795700ec206b4780fa66ca74e29367..4edcd2663b57bb3e8261b874e21b65cb91293d2d 100644 --- a/opentech/public/news/models.py +++ b/opentech/public/news/models.py @@ -123,6 +123,9 @@ class NewsPage(BasePage): else: return self.first_published_at + def get_absolute_url(self): + return self.full_url + class NewsIndex(BasePage): subpage_types = ['NewsPage'] diff --git a/opentech/public/news/views.py b/opentech/public/news/views.py new file mode 100644 index 0000000000000000000000000000000000000000..20ca9e0e3daf9277ef025af062c431e5792fb6ea --- /dev/null +++ b/opentech/public/news/views.py @@ -0,0 +1,46 @@ +from django.contrib.syndication.views import Feed + +from opentech.public.news.models import NewsPage, NewsType + + +class NewsFeed(Feed): + link = "https://www.opentech.fund/news/" + title = "OTF – News, updates, and announcements" + description = "News, updates, and announcements from The Open Technology Fund" + + def items(self): + return NewsPage.objects.live().order_by('-first_published_at')[:20] + + def item_title(self, item): + return item.title + + def item_description(self, item): + return item.body + + def item_pubdate(self, item): + return item.display_date + + +class NewsTypesFeed(Feed): + link = "https://www.opentech.fund/news/" + + def get_object(self, request, type): + return NewsType.objects.get(id=type) + + def title(self, type): + return f"OTF – News of type {type}" + + def description(self, type): + return f"News, updates, and announcements of type {type} from The Open Technology Fund" + + def items(self, type): + return NewsPage.objects.live().filter(news_types__news_type=type).order_by('-first_published_at')[:20] + + def item_title(self, item): + return item.title + + def item_description(self, item): + return item.body + + def item_pubdate(self, item): + return item.display_date diff --git a/opentech/public/urls.py b/opentech/public/urls.py index 40b2bb96aa3f0b5df11dc0c953999759bd8b36d5..81eedaf1465eeed641d08d6c80641fe014665942 100644 --- a/opentech/public/urls.py +++ b/opentech/public/urls.py @@ -1,10 +1,13 @@ from django.urls import include, path +from .news import views as news_views from .search import views as search_views from .mailchimp import urls as newsletter_urls urlpatterns = [ path('search/', search_views.search, name='search'), + path('news/feed/', news_views.NewsFeed(), name='news_feed'), + path('news/<int:type>/feed/', news_views.NewsTypesFeed(), name='news_types_feed'), path('newsletter/', include(newsletter_urls)) ]