view ygroup/views.py @ 629:f4c043cf55ac

Wiki integration. Requests don't always have sessions. In particular this occurs when a request is made without a trailing slash. The Common middleware redirects when this happens, and the middleware process_request() processing stops before a session can get added. So just set an attribute on the request object for each operation. This seemed weird to me at first, but there are plenty of examples of this in the Django code base already.
author Brian Neal <bgneal@gmail.com>
date Tue, 13 Nov 2012 13:50:06 -0600
parents ee87ea74d46b
children 5d208c3321ce
line wrap: on
line source
"""
Views for the ygroup (Yahoo Group Archive) application.

"""
from django.shortcuts import get_object_or_404
from django.views.generic import ListView

from ygroup.models import Thread, Post
from core.paginator import DiggPaginator


THREADS_PER_PAGE = 40
POSTS_PER_PAGE = 20


class ThreadIndexView(ListView):
    """
    This generic view displays the list of threads available.

    """
    model = Thread
    paginate_by = THREADS_PER_PAGE

    def get_paginator(self, queryset, per_page, **kwargs):
        """
        Return an instance of the paginator for this view.
        """
        return DiggPaginator(queryset, per_page, body=5, tail=2,
                margin=3, padding=2, **kwargs)


class ThreadView(ListView):
    """
    This generic view displays the posts in a thread.

    """
    context_object_name = "post_list"
    template_name = "ygroup/thread.html"
    paginate_by = POSTS_PER_PAGE

    def get_queryset(self):
        self.thread = get_object_or_404(Thread, pk=self.args[0])
        return Post.objects.filter(thread=self.thread)

    def get_context_data(self, **kwargs):
        context = super(ThreadView, self).get_context_data(**kwargs)
        context['thread'] = self.thread
        return context

    def get_paginator(self, queryset, per_page, **kwargs):
        """
        Return an instance of the paginator for this view.
        """
        return DiggPaginator(queryset, per_page, body=5, tail=2,
                margin=3, padding=2, **kwargs)