Advertisement
Stosswalkinator

views.py

Jun 3rd, 2014
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. from django.shortcuts import get_object_or_404, render
  2. from django.http import HttpResponseRedirect, HttpResponse
  3. from django.core.urlresolvers import reverse
  4. from polls.models import Choice, Poll
  5. from django.views import generic
  6. from django.utils import timezone
  7.  
  8. def index(request):
  9.     latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
  10.     context = {'latest_poll_list': latest_poll_list}
  11.     return render(request, 'polls/index.html', context)
  12.  
  13. def detail(request, poll_id):
  14.     poll = get_object_or_404(Poll, pk=poll_id)
  15.     return render(request, 'polls/detail.html', {'poll': poll})
  16.  
  17. def results(request, poll_id):
  18.     poll = get_object_or_404(Poll, pk=poll_id)
  19.     return render(request, 'polls/results.html', {'poll': poll})
  20.  
  21. class IndexView(generic.ListView):
  22.     template_name = 'polls/index.html'
  23.     context_object_name = 'latest_poll_list'
  24.  
  25.     def get_queryset(self):
  26.         """
  27.         Return the last five published polls (not including those set to be
  28.         published in the future).
  29.         """
  30.         return Poll.objects.filter(
  31.             pub_date__lte=timezone.now()
  32.         ).order_by('-pub_date')[:5]
  33.  
  34. class DetailView(generic.DetailView):
  35.     model = Poll
  36.     template_name = 'polls/detail.html'
  37.     def get_queryset(self):
  38.         """
  39.        Excludes any polls that aren't published yet.
  40.        """
  41.         return Poll.objects.filter(pub_date__lte=timezone.now())
  42.  
  43.  
  44. class ResultsView(generic.DetailView):
  45.     model = Poll
  46.     template_name = 'polls/results.html'
  47.  
  48. def vote(request, poll_id):
  49.     p = get_object_or_404(Poll, pk=poll_id)
  50.     try:
  51.         selected_choice = p.choice_set.get(pk=request.POST['choice'])
  52.     except (KeyError, Choice.DoesNotExist):
  53.         # Redisplay the poll voting form.
  54.         return render(request, 'polls/detail.html', {
  55.             'poll': p,
  56.             'error_message': "You didn't select a choice.",
  57.         })
  58.     else:
  59.         selected_choice.votes += 1
  60.         selected_choice.save()
  61.         # Always return an HttpResponseRedirect after successfully dealing
  62.         # with POST data. This prevents data from being posted twice if a
  63.         # user hits the Back button.
  64.         return HttpResponseRedirect(reverse('polls:results', args=(p.id,)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement