Skip to content
Snippets Groups Projects
Commit 030d47af authored by Parbhat Puri's avatar Parbhat Puri
Browse files

Use methods to set title, description, link instead of class attributes

parent 255b8ff1
No related branches found
No related tags found
No related merge requests found
...@@ -175,5 +175,7 @@ class NewsFeedSettings(BaseSetting): ...@@ -175,5 +175,7 @@ class NewsFeedSettings(BaseSetting):
news_title = models.CharField(max_length=255, help_text='The title of the main news feed.') news_title = models.CharField(max_length=255, help_text='The title of the main news feed.')
news_description = models.CharField(max_length=255, help_text='The description of the main news feed.') news_description = models.CharField(max_length=255, help_text='The description of the main news feed.')
news_per_type_title = models.CharField(max_length=255, help_text='The title of the news feed by type. Use {news_type} to insert the type name.') news_per_type_title = models.CharField(
news_per_type_description = models.CharField(max_length=255, help_text='The description of the news feed by type. Use {news_type} to insert the type name.') max_length=255, help_text='The title of the news feed by type. Use {news_type} to insert the type name.')
news_per_type_description = models.CharField(
max_length=255, help_text='The description of the news feed by type. Use {news_type} to insert the type name.')
from django.contrib.syndication.views import Feed from django.contrib.syndication.views import Feed
from django.db.models.functions import Coalesce from django.db.models.functions import Coalesce
from django.http import Http404
from wagtail.core.models import Site from wagtail.core.models import Site
...@@ -7,15 +8,30 @@ from opentech.public.news.models import NewsPage, NewsType, NewsIndex, NewsFeedS ...@@ -7,15 +8,30 @@ from opentech.public.news.models import NewsPage, NewsType, NewsIndex, NewsFeedS
class NewsFeed(Feed): class NewsFeed(Feed):
site = Site.objects.get(is_default_site=True) def __call__(self, request, *args, **kwargs):
news_feed_settings = NewsFeedSettings.for_site(site=site) try:
news_index = NewsIndex.objects.first() self.site = Site.objects.get(is_default_site=True)
link = f"{site.root_url}/{news_index.slug}/" self.news_feed_settings = NewsFeedSettings.for_site(site=self.site)
title = news_feed_settings.news_title except Site.DoesNotExist:
description = news_feed_settings.news_description raise Http404
return super().__call__(request, *args, **kwargs)
def title(self):
return self.news_feed_settings.news_title
def description(self):
return self.news_feed_settings.news_description
def link(self):
news_index = NewsIndex.objects.live().public().first()
if news_index:
return news_index.full_url
return self.site.root_url
def items(self): def items(self):
return NewsPage.objects.live().public().annotate(date=Coalesce('publication_date', 'first_published_at')).order_by('-date')[:20] return NewsPage.objects.live().public().annotate(
date=Coalesce('publication_date', 'first_published_at')
).order_by('-date')[:20]
def item_title(self, item): def item_title(self, item):
return item.title return item.title
...@@ -27,22 +43,23 @@ class NewsFeed(Feed): ...@@ -27,22 +43,23 @@ class NewsFeed(Feed):
return item.display_date return item.display_date
class NewsTypesFeed(NewsFeed): class NewsTypeFeed(NewsFeed):
site = Site.objects.get(is_default_site=True)
news_feed_settings = NewsFeedSettings.for_site(site=site)
news_index = NewsIndex.objects.first()
def get_object(self, request, news_type): def get_object(self, request, news_type):
return NewsType.objects.get(id=news_type) return NewsType.objects.get(id=news_type)
def link(self, obj):
return f"{self.site.root_url}/{self.news_index.slug}/?news_type={obj.id}"
def title(self, obj): def title(self, obj):
return self.news_feed_settings.news_per_type_title.format(news_type=obj) return self.news_feed_settings.news_per_type_title.format(news_type=obj)
def description(self, obj): def description(self, obj):
return self.news_feed_settings.news_per_type_description.format(news_type=obj) return self.news_feed_settings.news_per_type_description.format(news_type=obj)
def link(self, obj):
news_index = NewsIndex.objects.live().public().first()
if news_index:
return news_index.full_url + '?news_type={}'.format(obj.id)
return self.site.root_url
def items(self, obj): def items(self, obj):
return NewsPage.objects.live().public().filter(news_types__news_type=obj).annotate(date=Coalesce('publication_date', 'first_published_at')).order_by('-date')[:20] return NewsPage.objects.live().public().filter(news_types__news_type=obj).annotate(
date=Coalesce('publication_date', 'first_published_at')
).order_by('-date')[:20]
...@@ -8,6 +8,6 @@ from .mailchimp import urls as newsletter_urls ...@@ -8,6 +8,6 @@ from .mailchimp import urls as newsletter_urls
urlpatterns = [ urlpatterns = [
path('search/', search_views.search, name='search'), path('search/', search_views.search, name='search'),
path('news/feed/', news_views.NewsFeed(), name='news_feed'), path('news/feed/', news_views.NewsFeed(), name='news_feed'),
path('news/<int:news_type>/feed/', news_views.NewsTypesFeed(), name='news_types_feed'), path('news/<int:news_type>/feed/', news_views.NewsTypeFeed(), name='news_types_feed'),
path('newsletter/', include(newsletter_urls)) path('newsletter/', include(newsletter_urls))
] ]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment