from models import Entry, EntryTag # relative import
from django.views.generic.list_detail import object_list
# from django.views.generic.list_detail import object_list
from django.views.generic import ListView
from django.views.generic.dates import YearArchiveView, MonthArchiveView, DayArchiveView, DateDetailView
from conservancy.apps.staff.models import Person
from django.shortcuts import get_object_or_404, render_to_response
from datetime import datetime
def OR_filter(field_name, objs):
from django.db.models import Q
return reduce(lambda x, y: x | y,
[Q(**{field_name: x.id}) for x in objs])
def last_name(person):
return person.formal_name.rpartition(' ')[2]
class BlogListView(ListView):
extra_context = {}
def get_context_data(self, **kwargs):
context = super(BlogListView, self).get_context_data(**kwargs)
# context['key'] = 'value'
context.update(self.extra_context)
return context
def custom_index(request, queryset, *args, **kwargs):
"""Blog list view that allows scrolling and also shows an index by
year.
"""
kwargs = kwargs.copy()
kwargs['extra_context'] = kwargs.get('extra_context', {}).copy()
extra_context = kwargs['extra_context']
date_field = kwargs['date_field']
del kwargs['date_field']
@@ -41,25 +52,29 @@ def custom_index(request, queryset, *args, **kwargs):
extra_context['tags'] = tags
queryset = queryset.filter(OR_filter('tags', tags))
if authors or tags:
query_string = '&'.join(['author=%s' % a.username for a in authors]
+ ['tag=%s' % t.slug for t in tags])
extra_context['query_string'] = query_string
else:
date_list = queryset.dates(date_field, 'year')
extra_context['date_list'] = date_list
return object_list(request, queryset, *args, **kwargs)
# return object_list(request, queryset, *args, **kwargs)
kwargs['queryset'] = queryset
kwargs['extra_context'] = extra_context
callable = BlogListView.as_view(**kwargs)
return callable(request)
def techblog_redirect(request):
"""Redirect from the old 'techblog' to the new blog
path = request.path[len('/technology'):]
if path == '/blog/':
path += "?author=bkuhn"
return relative_redirect(request, path)
def query(request):
@@ -86,18 +101,55 @@ def query(request):
authors = sorted(Person.objects.filter(currently_employed=True,
entry__isnull=False).distinct(),
key=last_name)
tags = EntryTag.objects.all().order_by('label')
return render_to_response('blog/query.html',
{'authors': authors, 'tags': tags})
def relative_redirect(request, path):
from django import http
from django.conf import settings
host = http.get_host(request)
host = request.get_host()
if settings.FORCE_CANONICAL_HOSTNAME:
host = settings.FORCE_CANONICAL_HOSTNAME
url = "%s://%s%s" % (request.is_secure() and 'https' or 'http', host, path)
return http.HttpResponseRedirect(url)
class BlogYearArchiveView(YearArchiveView):
make_object_list = True
allow_future = True
context = super(BlogYearArchiveView, self).get_context_data(**kwargs)
class BlogMonthArchiveView(MonthArchiveView):
context = super(BlogMonthArchiveView, self).get_context_data(**kwargs)
class BlogDayArchiveView(DayArchiveView):
context = super(BlogDayArchiveView, self).get_context_data(**kwargs)
class BlogDateDetailView(DateDetailView):
context = super(BlogDateDetailView, self).get_context_data(**kwargs)