Added Blog page and views

This commit is contained in:
Sam Collins 2017-02-16 23:19:50 +00:00 committed by Oliver Marks
parent a5f0d97d54
commit 6c463d3b86
4 changed files with 77 additions and 5 deletions

View File

@ -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<slug>[0-9A-Za-z_\-]+)/$', BlogCategoryFeed(), name='blog-item'),
url(r'^blog/category/(?P<slug>[0-9A-Za-z_\-]+)/$', BlogCategoryFeed(), name='blog-category'),
url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category_feed'),
url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', blog, name='blog-item'),
url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/$', blog, name='blog-category'),
url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'),
# need to be logged in for these urls

View File

@ -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)

View File

@ -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})

View File

@ -0,0 +1,40 @@
{% extends "base.html" %}
{% block title %}Blog Posts{% endblock %}
{% block content %}
<div class="row">
<div class="col-sm-8">
{% for post in posts %}
<a href="{{ post.get_absolute_url }}"><h1>{{ post.title }}</h1></a>
<p>Published: {{ post.published_date }}</p>
<p>{{ post.description }}</p>
{% endfor %}
{% if posts.num_pages > 1 %}
<div class="pagination">
<span class="step-links">
{% if contacts.has_previous %}
<a href="?page={{ posts.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
{% if contacts.has_next %}
<a href="?page={{ posts.next_page_number }}">next</a>
{% endif %}
</span>
</div>
{% endif %}
</div>
<div class="col-sm-3 offset-sm-1">
<ul class="list-group">
{% for category in categories %}
<a href="{{ category.get_absolute_url }}" class="list-group-item list-group-item-action">{{ category.name }}</a>
{% endfor %}
</ul>
</div>
</div>
{% endblock content %}