Initial version of home page rss.xml feed

This commit is contained in:
Oliver Marks 2017-06-01 20:30:40 +01:00
parent bbcc3ff758
commit eac7ee9211
3 changed files with 92 additions and 8 deletions

View File

@ -15,7 +15,7 @@ from mhackspace.contact.views import contact
from mhackspace.members.views import MemberListView from mhackspace.members.views import MemberListView
from mhackspace.subscriptions import views as subscription from mhackspace.subscriptions import views as subscription
from mhackspace.base.feeds import LatestEntriesFeed from mhackspace.base.feeds import LatestEntriesFeed
from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed from mhackspace.blog.feeds import RssFeed, BlogFeed, BlogCategoryFeed
from mhackspace.base.views import markdown_uploader from mhackspace.base.views import markdown_uploader
from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostList from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostList
from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap
@ -48,7 +48,8 @@ urlpatterns = [
), ),
url(r'^blog/$', PostList.as_view(), name='blog'), url(r'^blog/$', PostList.as_view(), name='blog'),
url(r'^blog/rss/$', BlogFeed(), name='blog-rss'), url(r'^blog/rss/$', BlogFeed(), name='blog-rss'),
url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', BlogPost.as_view(), name='blog-item'), url(r'^rss.xml$', RssFeed(), name='main-rss'),
url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', BlogPost.as_view, name='blog-item'),
url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/$', PostList.as_view(), name='blog-category'), url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/$', PostList.as_view(), name='blog-category'),
url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'), url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'),
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},

View File

@ -5,6 +5,7 @@ from django.core.management import call_command
from mhackspace.base.models import BannerImage from mhackspace.base.models import BannerImage
from mhackspace.feeds.models import Article, Feed from mhackspace.feeds.models import Article, Feed
from mhackspace.users.models import User from mhackspace.users.models import User
from mhackspace.blog.models import Category, Post
class ImageFixture(AutoFixture): class ImageFixture(AutoFixture):
class Values: class Values:
@ -14,6 +15,17 @@ class Command(BaseCommand):
help = 'Build test data for development environment' help = 'Build test data for development environment'
def handle(self, *args, **options): def handle(self, *args, **options):
feeds = AutoFixture(Article)
feeds.create(10)
feed = AutoFixture(Feed)
feed.create(10)
post = AutoFixture(Post)
post.create(10)
categorys = AutoFixture(Category)
categorys.create(10)
# load known data # load known data
call_command('loaddata', 'mhackspace/users/fixtures/groups.json', verbose=0) call_command('loaddata', 'mhackspace/users/fixtures/groups.json', verbose=0)
@ -21,11 +33,6 @@ class Command(BaseCommand):
users = AutoFixture(User) users = AutoFixture(User)
users.create(10) users.create(10)
feed = AutoFixture(Feed)
feed.create(10)
feeds = AutoFixture(Article)
feeds.create(10)
banners = ImageFixture(BannerImage) banners = ImageFixture(BannerImage)
banners.create(10) banners.create(10)

View File

@ -1,13 +1,89 @@
from collections import OrderedDict
from django.contrib.syndication.views import Feed, add_domain from django.contrib.syndication.views import Feed, add_domain
from django.contrib.sites.shortcuts import get_current_site from django.contrib.sites.shortcuts import get_current_site
from django.utils import timezone from django.utils import timezone
from mhackspace.base.feeds import MediaRssFeed from mhackspace.base.feeds import MediaRssFeed
from mhackspace.blog.models import Category, Post from mhackspace.blog.models import Category, Post
from mhackspace.feeds.models import Article # as ArticleFeed
class RssFeed(Feed):
title = "Maidstone Hackspace News"
link = "/"
feed_type = MediaRssFeed
description = "The latest blog posts and news from the Maidstone Hackspace site"
def get_feed(self, obj, request):
self.current_site = get_current_site(request)
return super(RssFeed, self).get_feed(obj, request)
def items(self, category):
items = []
# for item in Post.objects.all():
for item in Post.objects.select_related('author').filter(
active=True,
members_only=False):
img = '/static/images/card.png'
if item.image:
img = item.image.home.url
items.append({
'title': item.title,
'description': item.description,
'author': item.author,
'pubdate': item.published_date,
'updated': item.updated_date,
'image': img})
for item in Article.objects.select_related('feed').all():
img = '/static/images/card.png'
if item.image:
img = item.image.home.url
items.append({
'title': item.title,
'description': item.description,
'author': item.feed.author,
'pubdate': item.date,
'updated': item.date,
'image': img})
items.sort(key=lambda r: r.get('pubdate'))
return items
def item_title(self, post):
return post.get('title')
def item_description(self, post):
return post.get('description')
def item_author_name(self, post):
return post.get('author')
def item_link(self, post):
return 'link'
def item_categories(self, post):
return ''
def item_pubdate(self, post):
return post.get('pubdate')
def item_updateddate(self, post):
return post.get('updated')
def item_extra_kwargs(self, post):
return {
'thumbnail_url': add_domain(
domain=self.current_site.domain,
url=post.get('image'),
secure=True),
'thumbnail_width': 100,
'thumbnail_height': 100,
}
class BlogFeed(Feed): class BlogFeed(Feed):
title = "Maidstone Hackspace Blog" title = "Mss.xmlaidstone Hackspace Blog"
link = "/blog/" link = "/blog/"
feed_type = MediaRssFeed feed_type = MediaRssFeed
description = "The latest blog posts and news from the Maidstone Hackspace site" description = "The latest blog posts and news from the Maidstone Hackspace site"