add rss feed to articles 2
This commit is contained in:
parent
3e35d179f5
commit
faf73d3ea4
1 changed files with 73 additions and 0 deletions
73
hub/services/feeds.py
Normal file
73
hub/services/feeds.py
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
"""
|
||||
RSS Feeds for the Servala website
|
||||
"""
|
||||
|
||||
from django.contrib.syndication.views import Feed
|
||||
from django.urls import reverse
|
||||
from django.utils.feedgenerator import Rss201rev2Feed
|
||||
from django.utils.html import strip_tags
|
||||
from .models import Article
|
||||
|
||||
|
||||
class ArticleRSSFeed(Feed):
|
||||
"""RSS feed for published articles"""
|
||||
|
||||
title = "Servala Articles"
|
||||
link = "/articles/"
|
||||
description = "Latest articles about cloud services, consulting partners, and technology insights from Servala"
|
||||
feed_type = Rss201rev2Feed
|
||||
|
||||
def items(self):
|
||||
"""Return the latest 20 published articles"""
|
||||
return Article.objects.filter(is_published=True).order_by("-article_date")[:20]
|
||||
|
||||
def item_title(self, item):
|
||||
"""Return the article title"""
|
||||
return item.title
|
||||
|
||||
def item_description(self, item):
|
||||
"""Return the article excerpt with 'Read more' link"""
|
||||
# Use the excerpt and add a read more link
|
||||
excerpt = strip_tags(item.excerpt)
|
||||
return f"{excerpt} Read more..."
|
||||
|
||||
def item_link(self, item):
|
||||
"""Return the link to the article detail page"""
|
||||
return item.get_absolute_url()
|
||||
|
||||
def item_guid(self, item):
|
||||
"""Return a unique identifier for the item"""
|
||||
return f"article-{item.id}"
|
||||
|
||||
def item_pubdate(self, item):
|
||||
"""Return the publication date"""
|
||||
# Convert date to datetime for RSS compatibility
|
||||
from datetime import datetime, time
|
||||
from django.utils import timezone
|
||||
|
||||
# Combine the date with midnight time and make it timezone-aware
|
||||
dt = datetime.combine(item.article_date, time.min)
|
||||
return timezone.make_aware(dt, timezone.get_current_timezone())
|
||||
|
||||
def item_author_name(self, item):
|
||||
"""Return the author name"""
|
||||
return item.author.get_full_name() or item.author.username
|
||||
|
||||
def item_categories(self, item):
|
||||
"""Return categories for the article"""
|
||||
categories = []
|
||||
|
||||
# Add related entity as category
|
||||
if item.related_service:
|
||||
categories.append(f"Service: {item.related_service.name}")
|
||||
if item.related_consulting_partner:
|
||||
categories.append(f"Partner: {item.related_consulting_partner.name}")
|
||||
if item.related_cloud_provider:
|
||||
categories.append(f"Provider: {item.related_cloud_provider.name}")
|
||||
|
||||
# Add meta keywords as categories if available
|
||||
if item.meta_keywords:
|
||||
keywords = [keyword.strip() for keyword in item.meta_keywords.split(",")]
|
||||
categories.extend(keywords)
|
||||
|
||||
return categories
|
||||
Loading…
Add table
Add a link
Reference in a new issue