Added Post 404 handling and support for published dates in future
This commit is contained in:
parent
fcb493d2e3
commit
db0c031664
|
@ -1,15 +1,16 @@
|
||||||
from django.contrib.syndication.views import Feed
|
from django.contrib.syndication.views import Feed
|
||||||
from django.urls import reverse
|
from django.utils import timezone
|
||||||
|
|
||||||
from mhackspace.blog.models import Category, Post
|
from mhackspace.blog.models import Category, Post
|
||||||
|
|
||||||
|
|
||||||
class BlogFeed(Feed):
|
class BlogFeed(Feed):
|
||||||
title = "Maidstone Hackspace Blog"
|
title = "Maidstone Hackspace Blog"
|
||||||
link = "/blog/"
|
link = "/blog/"
|
||||||
description = "The latest blog posts and news from the Maidstone Hackspace site"
|
description = "The latest blog posts and news from the Maidstone Hackspace site"
|
||||||
|
|
||||||
def items(self, category):
|
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):
|
def item_title(self, item):
|
||||||
return item.title
|
return item.title
|
||||||
|
@ -33,12 +34,13 @@ class BlogFeed(Feed):
|
||||||
def item_updateddate(self, item):
|
def item_updateddate(self, item):
|
||||||
return item.updated_date
|
return item.updated_date
|
||||||
|
|
||||||
|
|
||||||
class BlogCategoryFeed(BlogFeed):
|
class BlogCategoryFeed(BlogFeed):
|
||||||
def get_object(self, request, category):
|
def get_object(self, request, category):
|
||||||
return Category.objects.filter(slug=category).first()
|
return Category.objects.filter(slug=category).first()
|
||||||
|
|
||||||
def items(self, category):
|
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):
|
def title(self, category):
|
||||||
return "Maidstone Hackspace Blog: %s" % category.name
|
return "Maidstone Hackspace Blog: %s" % category.name
|
||||||
|
|
|
@ -48,5 +48,5 @@ class Post(models.Model):
|
||||||
return reverse('blog-item', kwargs={'slug': self.slug})
|
return reverse('blog-item', kwargs={'slug': self.slug})
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('-updated_date',)
|
ordering = ('-published_date',)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from django.contrib.sitemaps import Sitemap
|
from django.contrib.sitemaps import Sitemap
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
from mhackspace.blog.models import Category, Post
|
from mhackspace.blog.models import Category, Post
|
||||||
|
|
||||||
class PostSitemap(Sitemap):
|
class PostSitemap(Sitemap):
|
||||||
|
@ -6,7 +8,7 @@ class PostSitemap(Sitemap):
|
||||||
priority = 0.5
|
priority = 0.5
|
||||||
|
|
||||||
def items(self):
|
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):
|
def lastmod(self, obj):
|
||||||
return obj.updated_date
|
return obj.updated_date
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
from django.http import Http404
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
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 import DateTimeFromToRangeFilter
|
||||||
from django_filters.rest_framework import FilterSet
|
from django_filters.rest_framework import FilterSet
|
||||||
from django_filters.widgets import RangeWidget
|
from django_filters.widgets import RangeWidget
|
||||||
|
@ -11,18 +13,16 @@ from mhackspace.blog.serializers import PostSerializer, CategorySerializer
|
||||||
def blog(request, slug=None, category=None):
|
def blog(request, slug=None, category=None):
|
||||||
categories = Category.objects.all()
|
categories = Category.objects.all()
|
||||||
|
|
||||||
try:
|
|
||||||
if slug is not None:
|
if slug is not None:
|
||||||
blog_posts = Post.objects.filter(active=True, slug=slug)
|
blog_posts = Post.objects.filter(active=True, slug=slug)
|
||||||
elif category is not None:
|
elif category is not None:
|
||||||
category = Category.objects.filter(slug=category)
|
category = Category.objects.filter(slug=category)
|
||||||
blog_posts = Post.objects.filter(active=True, categories=category)
|
blog_posts = Post.objects.filter(active=True, categories=category, published_date__lte=timezone.now())
|
||||||
else:
|
else:
|
||||||
blog_posts = Post.objects.filter(active=True)
|
blog_posts = Post.objects.filter(active=True, published_date__lte=timezone.now())
|
||||||
except Category.DoesNotExist:
|
|
||||||
raise Http404("Category does not exist")
|
if len(blog_posts) < 1:
|
||||||
except Post.DoesNotExist:
|
raise Http404("No posts found")
|
||||||
raise Http404("Post does not exist")
|
|
||||||
|
|
||||||
paginator = Paginator(blog_posts, 5)
|
paginator = Paginator(blog_posts, 5)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue