diff --git a/config/urls.py b/config/urls.py index 2554f89..6b8ff61 100644 --- a/config/urls.py +++ b/config/urls.py @@ -14,6 +14,7 @@ from mhackspace.members.views import MemberListView from mhackspace.subscriptions import views as subscription from mhackspace.base.feeds import LatestEntriesFeed from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed +from mhackspace.blog.views import blog urlpatterns = [ url(r'^$', TemplateView.as_view(template_name='pages/home.html'), name='home'), @@ -22,11 +23,11 @@ urlpatterns = [ url(r'^mailing-list/$', TemplateView.as_view(template_name='pages/mailing-list.html'), name='group'), url(r'^contact/$', contact, name='contact'), - url(r'^blog/$', contact, name='contact'), + url(r'^blog/$', blog, name='contact'), url(r'^blog/rss/$', BlogFeed()), - url(r'^blog/(?P[0-9A-Za-z_\-]+)/$', BlogCategoryFeed(), name='blog-item'), - url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/$', BlogCategoryFeed(), name='blog-category'), - url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category_feed'), + 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/category/(?P[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'), # need to be logged in for these urls diff --git a/mhackspace/blog/models.py b/mhackspace/blog/models.py index dccad7f..04712a3 100644 --- a/mhackspace/blog/models.py +++ b/mhackspace/blog/models.py @@ -14,6 +14,9 @@ class Category(models.Model): def __str__(self): return self.name + def get_absolute_url(self): + return reverse('blog-category', kwargs={'category': self.slug}) + class Post(models.Model): title = models.CharField(max_length=100, unique=True) slug = models.SlugField(max_length=100, unique=True) diff --git a/mhackspace/blog/views.py b/mhackspace/blog/views.py index 91ea44a..be3613a 100644 --- a/mhackspace/blog/views.py +++ b/mhackspace/blog/views.py @@ -1,3 +1,31 @@ from django.shortcuts import render +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from mhackspace.blog.models import Post, Category -# Create your views here. +def blog(request, slug=None, category=None): + categories = Category.objects.all() + + try: + if slug is not None: + blog_posts = Post.objects.filter(slug=slug) + elif category is not None: + category = Category.objects.filter(slug=category) + blog_posts = Post.objects.filter(categories=category) + else: + blog_posts = Post.objects.all() + except Category.DoesNotExist: + raise Http404("Category does not exist") + except Post.DoesNotExist: + raise Http404("Post does not exist") + + 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}) diff --git a/mhackspace/templates/blog/posts.html b/mhackspace/templates/blog/posts.html new file mode 100644 index 0000000..385eb9f --- /dev/null +++ b/mhackspace/templates/blog/posts.html @@ -0,0 +1,40 @@ +{% extends "base.html" %} + +{% block title %}Blog Posts{% endblock %} + +{% block content %} +
+
+ {% for post in posts %} +

{{ post.title }}

+

Published: {{ post.published_date }}

+

{{ post.description }}

+ {% endfor %} + + {% if posts.num_pages > 1 %} + + {% endif %} +
+
+ +
+
+{% endblock content %}