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 }}

- \ No newline at end of file +
+ {% csrf_token %} +
+

{{ question.question_text }}

+ {% if error_message %}

{{ error_message }}

{% endif %} + {% for choice in question.choice_set.all %} + +
+ {% endfor %} +
+ +
\ 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 }}

+ + + +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