fmartingr.com-legacy/fmartingrcom/apps/blog/views.py

104 lines
2.9 KiB
Python

from datetime import datetime
from django.shortcuts import render_to_response
from django.template.loader import get_template
from django.template import RequestContext
from django.http import Http404, HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.conf import settings
import fmartingrcom.apps.blog.utils as blog_utils
from .models import Entry
from fmartingrcom.apps._core.views import View
from fmartingrcom.apps.config.models import SiteConfiguration
config = SiteConfiguration.objects.get()
class ListView(View):
section = 'blog'
template = 'blog/list.jinja'
def get(self, request, page_number=1):
if 'page' in request.GET:
page_number = int(request.GET['page'])
paginator, page = blog_utils.get_paginator(request, page_number)
self.data['page'] = page
self.data['page_number'] = page_number
self.data['paginator'] = paginator
context = RequestContext(request, self.data)
return render_to_response(self.template, context_instance=context)
class EntryView(View):
section = 'blog'
template = 'blog/entry.jinja'
def get(self, request, year, month, day, slug):
try:
filters = {
'slug': slug,
'date__year': int(year),
'date__month': int(month),
'date__day': int(day),
}
item = Entry.objects.get(**filters)
except Entry.DoesNotExist:
raise Http404
paginator, page = blog_utils.get_paginator(request, item=item)
self.data['page'] = page
self.data['paginator'] = paginator
self.data['item'] = item
context = RequestContext(request, self.data)
return render_to_response(self.template, context_instance=context)
class SearchView(ListView):
template = 'blog/search.jinja'
def post(self, request):
page_number = 1
if 'page' in request.GET:
page_number = int(request.GET['page'])
search_query = request.POST['query']
if not search_query:
return HttpResponseRedirect(reverse('blog:list'))
paginator, page = blog_utils.get_paginator(
request, page_number, query=search_query
)
self.data['page'] = page
self.data['page_number'] = page_number
self.data['paginator'] = paginator
self.data['search_query'] = search_query
context = RequestContext(request, self.data)
return render_to_response(self.template, context_instance=context)
class RSSView(View):
template = 'blog/rss.jinja'
def get(self, request):
limit = config.rss_items
items = blog_utils.get_posts(limit=limit)
self.data['items'] = items
context = RequestContext(request, self.data)
template = get_template(self.template)
return HttpResponse(
template.render(context),
content_type='text/xml'
)