"""Polls application for django tutorial."""
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.core.urlresolvers import reverse
from django.views.generic import ListView, DetailView
from django.utils import timezone

from .models import Question, Choice


class IndexView(ListView):
    """Main index view."""

    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """Return the last five published questions.

        This does not include quesitons that are slated to be published
        in the future.
        """
        return Question.objects.filter(
                   pub_date__lte=timezone.now()).order_by('-pub_date')[:5]


class DetailView(DetailView):
    """Main Detail View."""

    model = Question
    template_name = 'polls/detail.html'


class ResultsView(DetailView):
    """Main Results View."""

    model = Question
    template_name = 'polls/results.html'


def vote(request, question_id):
    """Return a vote view based on question_id."""
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "Select a valid choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse('polls:results',
                                            args=(question.id,)))

"""Polls application for django tutorial."""
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.core.urlresolvers import reverse
from django.views.generic import ListView, DetailView
from django.utils import timezone

from .models import Question, Choice


class IndexView(ListView):
    """Main index view."""

    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """Return the last five published questions.

        This does not include quesitons that are slated to be published
        in the future.
        """
        return Question.objects.filter(
                   pub_date__lte=timezone.now()).order_by('-pub_date')[:5]


class DetailView(DetailView):
    """Main Detail View."""

    model = Question
    template_name = 'polls/detail.html'


class ResultsView(DetailView):
    """Main Results View."""

    model = Question
    template_name = 'polls/results.html'


def vote(request, question_id):
    """Return a vote view based on question_id."""
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "Select a valid choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse('polls:results',
                                            args=(question.id,)))

Polls application for django tutorial. Main index view. Return the last five published questions.          This does not include quesitons that are slated to be published         in the future. Main Detail View. Main Results View. Return a vote view based on question_id. # Redisplay the question voting form. # Always return an HttpResponseRedirect after successfully dealing # with POST data. This prevents data from being posted twice if a # user hits the Back button.