diff --git a/polls/templates/polls/detail.html b/polls/templates/polls/detail.html
index 4e1bd67..6df8776 100644
--- a/polls/templates/polls/detail.html
+++ b/polls/templates/polls/detail.html
@@ -1,6 +1,12 @@
-
{{ question.question_text }}
-
-{% for choice in question.choice_set.all %}
- - {{ choice.choice_text }}
-{% endfor %}
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/polls/templates/polls/result.html b/polls/templates/polls/result.html
new file mode 100644
index 0000000..33b67b2
--- /dev/null
+++ b/polls/templates/polls/result.html
@@ -0,0 +1,9 @@
+{{ question.question_text }}
+
+
+{% for choice in question.choice_set.all %}
+ - {{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}
+{% endfor %}
+
+
+Vote again?
\ No newline at end of file
diff --git a/polls/urls.py b/polls/urls.py
index 21dff7e..45ebddd 100644
--- a/polls/urls.py
+++ b/polls/urls.py
@@ -4,8 +4,8 @@ from . import views
app_name = "polls"
urlpatterns = [
- path("", views.index, name="index"),
- path("/", views.detail, name="detail"),
- path("/results/", views.results, name="results"),
+ path("", views.IndexView.as_view(), name="index"),
+ path("/", views.DetailView.as_view(), name="detail"),
+ path("/results/", views.ResultsView.as_view(), name="results"),
path("/vote/", views.vote, name="vote"),
]
diff --git a/polls/views.py b/polls/views.py
index 285fac1..1846efe 100644
--- a/polls/views.py
+++ b/polls/views.py
@@ -1,14 +1,15 @@
-from django.http import HttpResponse
-from django.shortcuts import render
+from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
+from django.urls import reverse
+from django.views import generic
-from .models import Question
+from .models import Choice, Question
-def index(request):
- latest_question_list = Question.objects.order_by("-pub_date")[:5]
- context = {"latest_question_list": latest_question_list}
- return render(request, "polls/index.html", context)
+# def index(request):
+# latest_question_list = Question.objects.order_by("-pub_date")[:5]
+# context = {"latest_question_list": latest_question_list}
+# return render(request, "polls/index.html", context)
# def index(request):
@@ -28,15 +29,58 @@ def index(request):
# return render(request, "polls/detail.html", {"question": question})
-def detail(request, question_id):
- question = get_object_or_404(Question, pk=question_id)
- return render(request, "polls/detail.html", {"question": question})
+# def detail(request, question_id):
+# question = get_object_or_404(Question, pk=question_id)
+# return render(request, "polls/detail.html", {"question": question})
-def results(request, question_id):
- response = "You're looking at the results of question %s."
- return HttpResponse(response % question_id)
+# def results(request, question_id):
+# response = "You're looking at the results of question %s."
+# return HttpResponse(response % question_id)
+
+
+# def results(request, question_id):
+# question = get_object_or_404(Question, pk=question_id)
+# return render(request, "polls/results.html", {"question": question})
+
+
+# def vote(request, question_id):
+# return HttpResponse("You're voting on question %s." % question_id)
+
+
+class IndexView(generic.ListView):
+ template_name = "polls/index.html"
+ context_object_name = "latest_question_list"
+
+ def get_queryset(self):
+ """Return the last five published questions."""
+ return Question.objects.order_by("-pub_date")[:5]
+
+
+class DetailView(generic.DetailView):
+ model = Question
+ template_name = "polls/detail.html"
+
+
+class ResultsView(generic.DetailView):
+ model = Question
+ template_name = "polls/results.html"
def vote(request, question_id):
- return HttpResponse("You're voting on question %s." % question_id)
\ No newline at end of file
+ question = get_object_or_404(Question, pk=question_id)
+ try:
+ selected_choice = question.choice_set.get(pk=request.POST["choice"])
+ except (KeyError, Choice.DoesNotExist):
+ return render(
+ request,
+ "polls/detail.html",
+ {
+ "question": question,
+ "error_message": "You didn't select a choice.",
+ },
+ )
+ else:
+ selected_choice.votes += 1
+ selected_choice.save()
+ return HttpResponseRedirect(reverse("polls:results", args=(question.id,)))
\ No newline at end of file