From c1f6d3f22e885947c258d827ab196877973d0219 Mon Sep 17 00:00:00 2001 From: Sam Collins Date: Wed, 22 Mar 2017 23:47:14 +0000 Subject: [PATCH] Switched to class based views for blog --- config/urls.py | 10 ++-- mhackspace/blog/templatetags/blog.py | 11 +++++ mhackspace/blog/views.py | 38 +++++---------- mhackspace/templates/base/pagination.html | 30 ++++++++++++ mhackspace/templates/blog/post_date.html | 12 +++++ mhackspace/templates/blog/post_detail.html | 24 ++++++++++ mhackspace/templates/blog/post_list.html | 28 +++++++++++ mhackspace/templates/blog/posts.html | 55 ---------------------- mhackspace/templates/blog/sidebar.html | 10 ++++ 9 files changed, 133 insertions(+), 85 deletions(-) create mode 100644 mhackspace/blog/templatetags/blog.py create mode 100644 mhackspace/templates/base/pagination.html create mode 100644 mhackspace/templates/blog/post_date.html create mode 100644 mhackspace/templates/blog/post_detail.html create mode 100644 mhackspace/templates/blog/post_list.html delete mode 100644 mhackspace/templates/blog/posts.html create mode 100644 mhackspace/templates/blog/sidebar.html diff --git a/config/urls.py b/config/urls.py index 98db6ca..a7b910d 100644 --- a/config/urls.py +++ b/config/urls.py @@ -17,7 +17,7 @@ from mhackspace.subscriptions import views as subscription from mhackspace.base.feeds import LatestEntriesFeed from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed from mhackspace.base.views import markdown_uploader -from mhackspace.blog.views import blog, PostViewSet, CategoryViewSet +from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostList from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap from mhackspace.feeds.views import FeedViewSet, ArticleViewSet @@ -46,10 +46,10 @@ urlpatterns = [ r'^api/uploader/$', markdown_uploader, name='markdown_uploader_page' ), - url(r'^blog/$', blog, name='blog'), - url(r'^blog/rss/$', BlogFeed()), - url(r'^blog/(?P[0-9A-Za-z_\-]+)/$', blog, name='blog-item'), - url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/$', blog, name='blog-category'), + url(r'^blog/$', PostList.as_view(), name='blog'), + url(r'^blog/rss/$', BlogFeed(), name='blog-rss'), + url(r'^blog/(?P[0-9A-Za-z_\-]+)/$', BlogPost.as_view(), name='blog-item'), + url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/$', PostList.as_view(), name='blog-category'), url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'), url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'), diff --git a/mhackspace/blog/templatetags/blog.py b/mhackspace/blog/templatetags/blog.py new file mode 100644 index 0000000..93e5fcc --- /dev/null +++ b/mhackspace/blog/templatetags/blog.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from django import template + +from mhackspace.blog.models import Category + +register = template.Library() + + +@register.inclusion_tag('blog/sidebar.html') +def sidebar(): + return {'categories': Category.objects.all()} diff --git a/mhackspace/blog/views.py b/mhackspace/blog/views.py index 9f9a940..5c142f1 100644 --- a/mhackspace/blog/views.py +++ b/mhackspace/blog/views.py @@ -1,7 +1,6 @@ -from django.http import Http404 -from django.shortcuts import render -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.shortcuts import get_object_or_404 from django.utils import timezone +from django.views.generic import ListView, DetailView from rest_framework import viewsets from django_filters import DateTimeFromToRangeFilter from django_filters.rest_framework import FilterSet @@ -10,31 +9,20 @@ from mhackspace.blog.models import Post, Category from mhackspace.blog.serializers import PostSerializer, CategorySerializer -def blog(request, slug=None, category=None): - categories = Category.objects.all() +class BlogPost(DetailView): + context_object_name = 'post' + queryset = Post.objects.filter(active=True, members_only=False) # todo: check member status here - 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") +class PostList(ListView): + context_object_name = 'posts' + paginate_by = 5 - paginator = Paginator(blog_posts, 5) - - page = request.GET.get('page') - try: - posts = paginator.page(page) - except PageNotAnInteger: - posts = paginator.page(1) - except EmptyPage: - posts = paginator.page(paginator.num_pages) - - return render(request, 'blog/posts.html', {'posts': posts, 'categories': categories}) + def get_queryset(self): + if 'category' in self.kwargs: + self.category = get_object_or_404(Category, slug=self.kwargs['category']) + return Post.objects.filter(active=True, categories=self.category, published_date__lte=timezone.now(), members_only=False) + return Post.objects.filter(active=True, published_date__lte=timezone.now(), members_only=False) class PostFilter(FilterSet): diff --git a/mhackspace/templates/base/pagination.html b/mhackspace/templates/base/pagination.html new file mode 100644 index 0000000..923856e --- /dev/null +++ b/mhackspace/templates/base/pagination.html @@ -0,0 +1,30 @@ +{% if is_paginated == True %} + +{% endif %} diff --git a/mhackspace/templates/blog/post_date.html b/mhackspace/templates/blog/post_date.html new file mode 100644 index 0000000..888f96b --- /dev/null +++ b/mhackspace/templates/blog/post_date.html @@ -0,0 +1,12 @@ +
+ Published: + + {% if post.updated_date != post.published_date %} + Updated: + + {{ post.updated_date }} + + {% endif %} +
diff --git a/mhackspace/templates/blog/post_detail.html b/mhackspace/templates/blog/post_detail.html new file mode 100644 index 0000000..fd7f30b --- /dev/null +++ b/mhackspace/templates/blog/post_detail.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{% load dractags blog %} +{% block title %}{{ post.title }}{% endblock %} + +{% block content %} +
+
+
+

{{ post.title }}

+ {% include "blog/post_date.html" %} + {% if post.image %} +
+ + + + +
+ {% endif %} + {{ post.description|safe_markdown }} +
+
+ {% sidebar %} +
+{% endblock content %} diff --git a/mhackspace/templates/blog/post_list.html b/mhackspace/templates/blog/post_list.html new file mode 100644 index 0000000..fd86137 --- /dev/null +++ b/mhackspace/templates/blog/post_list.html @@ -0,0 +1,28 @@ +{% extends "base.html" %} +{% load dractags blog %} +{% block title %}Blog Posts{% endblock %} + +{% block content %} +
+
+ {% for post in posts %} +
+

{{ post.title }}

+ {% include "blog/post_date.html" %} + {% if post.image %} +
+ + + + +
+ {% endif %} + {{ post.description|safe_markdown|striptags|truncatewords:30 }} +
+ {% endfor %} + + {% include "base/pagination.html" %} +
+ {% sidebar %} +
+{% endblock content %} diff --git a/mhackspace/templates/blog/posts.html b/mhackspace/templates/blog/posts.html deleted file mode 100644 index 32bac04..0000000 --- a/mhackspace/templates/blog/posts.html +++ /dev/null @@ -1,55 +0,0 @@ -{% extends "base.html" %} -{% load dractags %} -{% block title %}Blog Posts{% endblock %} - -{% block content %} -
-
- {% for post in posts %} -
-

{{ post.title }}

-
- Published: - {% if post.updated_date != post.published_date %} - Updated: {{ post.updated_date }} - {% endif %} -
- {% if post.image %} -
- - - - -
- {% endif %} - {{ post.description|safe_markdown }} -
- {% endfor %} - - {% if posts.num_pages > 1 %} - - {% endif %} -
-
- -
-
-{% endblock content %} diff --git a/mhackspace/templates/blog/sidebar.html b/mhackspace/templates/blog/sidebar.html new file mode 100644 index 0000000..30f9b30 --- /dev/null +++ b/mhackspace/templates/blog/sidebar.html @@ -0,0 +1,10 @@ +
+

Categories

+ + RSS Feed +