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):
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_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_description = models.CharField(max_length=255, help_text='The description of the news feed by type. Use {news_type} to insert the type name.')
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_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.db.models.functions import Coalesce
from django.http import Http404
from wagtail.core.models import Site
......@@ -7,15 +8,30 @@ from opentech.public.news.models import NewsPage, NewsType, NewsIndex, NewsFeedS
class NewsFeed(Feed):
site = Site.objects.get(is_default_site=True)
news_feed_settings = NewsFeedSettings.for_site(site=site)
news_index = NewsIndex.objects.first()
link = f"{site.root_url}/{news_index.slug}/"
title = news_feed_settings.news_title
description = news_feed_settings.news_description
def __call__(self, request, *args, **kwargs):
try:
self.site = Site.objects.get(is_default_site=True)
self.news_feed_settings = NewsFeedSettings.for_site(site=self.site)
except Site.DoesNotExist:
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):
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):
return item.title
......@@ -27,22 +43,23 @@ class NewsFeed(Feed):
return item.display_date
class NewsTypesFeed(NewsFeed):
site = Site.objects.get(is_default_site=True)
news_feed_settings = NewsFeedSettings.for_site(site=site)
news_index = NewsIndex.objects.first()
class NewsTypeFeed(NewsFeed):
def get_object(self, request, 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):
return self.news_feed_settings.news_per_type_title.format(news_type=obj)
def description(self, 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):
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
urlpatterns = [
path('search/', search_views.search, name='search'),
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))
]
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