2
2
# and template loader
3
3
from django .shortcuts import get_object_or_404 , render
4
4
5
- from django .http import HttpResponse , HttpResponseRedirect
5
+ from django .http import HttpResponseRedirect
6
6
from django .urls import reverse
7
+ from django .views import generic
7
8
8
9
from .models import Choice , Question
9
10
10
11
11
12
# Create your views here.
12
- def index (request ):
13
- # Grab the 5 most recent questions, ordered by with
14
- # the most reecnt first
15
- latest_question_list = Question .objects .order_by ("-pub_date" )[:5 ]
16
- context = {
17
- "latest_question_list" : latest_question_list
18
- }
19
- return render (request , "polls/index.html" , context )
13
+ class IndexView (generic .ListView ):
14
+ # Overriding the the ListView generic view default
15
+ # template called <app name>/<model name>_list.html
16
+ template_name = "polls/index.html"
17
+ # Override the automatically generated context variable is question_list
18
+ context_object_name = "latest_question_list"
20
19
20
+ def get_queryset (self ):
21
+ """Return the last five pulished questions."""
22
+ return Question .objects .order_by ("-pub_date" )[:5 ]
21
23
22
- def detail (request , question_id ):
23
- question = get_object_or_404 (Question , pk = question_id )
24
- return render (request , "polls/detail.html" , {"question" : question })
25
24
25
+ class DetailView (generic .DetailView ):
26
+ model = Question
27
+ # Overrides the default template name of DetailView
28
+ # generic, default is <app name>/<model name>_detail.html
29
+ template_name = "polls/detail.html"
26
30
27
- def results (request , question_id ):
28
- question = get_object_or_404 (Question , pk = question_id )
29
- return render (request , "polls/results.html" , {"question" : question })
31
+
32
+ class ResultsView (generic .DetailView ):
33
+ model = Question
34
+ template_name = "polls/results.html"
30
35
31
36
32
37
def vote (request , question_id ):
@@ -48,5 +53,5 @@ def vote(request, question_id):
48
53
# Always return an HttpResponseRedirect after successfully dealing
49
54
# with POST data. This prevents data from being posted twice if a
50
55
# user hits the Back button.
51
- url_redirect = "poll :results"
56
+ url_redirect = "polls :results"
52
57
return HttpResponseRedirect (reverse (url_redirect , args = (question_id ,)))
0 commit comments