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.subscriptions import views as subscription
from mhackspace.base.feeds import LatestEntriesFeed from mhackspace.base.feeds import LatestEntriesFeed
from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed
from mhackspace.blog.views import blog
urlpatterns = [ urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='pages/home.html'), name='home'), 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'^mailing-list/$', TemplateView.as_view(template_name='pages/mailing-list.html'), name='group'),
url(r'^contact/$', contact, name='contact'), 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/rss/$', BlogFeed()),
url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', BlogCategoryFeed(), name='blog-item'), url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', blog, 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_\-]+)/$', blog, name='blog-category'),
url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category_feed'), url(r'^blog/category/(?P<category>[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'),
# need to be logged in for these urls # need to be logged in for these urls

View File

@ -14,6 +14,9 @@ class Category(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
def get_absolute_url(self):
return reverse('blog-category', kwargs={'category': self.slug})
class Post(models.Model): class Post(models.Model):
title = models.CharField(max_length=100, unique=True) title = models.CharField(max_length=100, unique=True)
slug = models.SlugField(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.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 %}