From db0c0316647e94a64414e015b8c48d6744cc0ff5 Mon Sep 17 00:00:00 2001 From: Sam Collins Date: Wed, 22 Mar 2017 22:08:49 +0000 Subject: [PATCH] Added Post 404 handling and support for published dates in future --- mhackspace/blog/feeds.py | 8 +++++--- mhackspace/blog/models.py | 2 +- mhackspace/blog/sitemaps.py | 4 +++- mhackspace/blog/views.py | 26 +++++++++++++------------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/mhackspace/blog/feeds.py b/mhackspace/blog/feeds.py index 77e2fa6..25e49fd 100644 --- a/mhackspace/blog/feeds.py +++ b/mhackspace/blog/feeds.py @@ -1,15 +1,16 @@ from django.contrib.syndication.views import Feed -from django.urls import reverse +from django.utils import timezone from mhackspace.blog.models import Category, Post + class BlogFeed(Feed): title = "Maidstone Hackspace Blog" link = "/blog/" description = "The latest blog posts and news from the Maidstone Hackspace site" def items(self, category): - return Post.objects.select_related('author').filter(active=True, members_only=False)[:20] + return Post.objects.select_related('author').filter(active=True, members_only=False, published_date__lte=timezone.now())[:20] def item_title(self, item): return item.title @@ -33,12 +34,13 @@ class BlogFeed(Feed): def item_updateddate(self, item): return item.updated_date + class BlogCategoryFeed(BlogFeed): def get_object(self, request, category): return Category.objects.filter(slug=category).first() def items(self, category): - return Post.objects.select_related('author').filter(active=True, members_only=False, categories=category)[:20] + return Post.objects.select_related('author').filter(active=True, members_only=False, categories=category, published_date__lte=timezone.now())[:20] def title(self, category): return "Maidstone Hackspace Blog: %s" % category.name diff --git a/mhackspace/blog/models.py b/mhackspace/blog/models.py index 3326f07..d6fc6cb 100644 --- a/mhackspace/blog/models.py +++ b/mhackspace/blog/models.py @@ -48,5 +48,5 @@ class Post(models.Model): return reverse('blog-item', kwargs={'slug': self.slug}) class Meta: - ordering = ('-updated_date',) + ordering = ('-published_date',) diff --git a/mhackspace/blog/sitemaps.py b/mhackspace/blog/sitemaps.py index d7119b5..f963380 100644 --- a/mhackspace/blog/sitemaps.py +++ b/mhackspace/blog/sitemaps.py @@ -1,4 +1,6 @@ from django.contrib.sitemaps import Sitemap +from django.utils import timezone + from mhackspace.blog.models import Category, Post class PostSitemap(Sitemap): @@ -6,7 +8,7 @@ class PostSitemap(Sitemap): priority = 0.5 def items(self): - return Post.objects.filter(active=True, members_only=False) + return Post.objects.filter(active=True, members_only=False, published_date__lte=timezone.now()) def lastmod(self, obj): return obj.updated_date diff --git a/mhackspace/blog/views.py b/mhackspace/blog/views.py index a019b97..9f9a940 100644 --- a/mhackspace/blog/views.py +++ b/mhackspace/blog/views.py @@ -1,6 +1,8 @@ +from django.http import Http404 from django.shortcuts import render from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -from rest_framework import filters, viewsets +from django.utils import timezone +from rest_framework import viewsets from django_filters import DateTimeFromToRangeFilter from django_filters.rest_framework import FilterSet from django_filters.widgets import RangeWidget @@ -11,18 +13,16 @@ from mhackspace.blog.serializers import PostSerializer, CategorySerializer def blog(request, slug=None, category=None): categories = Category.objects.all() - try: - if slug is not None: - blog_posts = Post.objects.filter(active=True, slug=slug) - elif category is not None: - category = Category.objects.filter(slug=category) - blog_posts = Post.objects.filter(active=True, categories=category) - else: - blog_posts = Post.objects.filter(active=True) - except Category.DoesNotExist: - raise Http404("Category does not exist") - except Post.DoesNotExist: - raise Http404("Post does not exist") + if slug is not None: + blog_posts = Post.objects.filter(active=True, slug=slug) + elif category is not None: + category = Category.objects.filter(slug=category) + blog_posts = Post.objects.filter(active=True, categories=category, published_date__lte=timezone.now()) + else: + blog_posts = Post.objects.filter(active=True, published_date__lte=timezone.now()) + + if len(blog_posts) < 1: + raise Http404("No posts found") paginator = Paginator(blog_posts, 5)