From 5bbfa35af93dfcd08da399244c497532b511abb7 Mon Sep 17 00:00:00 2001 From: roger Date: Mon, 19 Sep 2022 18:14:13 +0800 Subject: [PATCH] use general view for code reuse --- polls/urls.py | 15 +++++++-- polls/views.py | 90 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 67 insertions(+), 38 deletions(-) diff --git a/polls/urls.py b/polls/urls.py index 6c8eb06..cc07a0b 100644 --- a/polls/urls.py +++ b/polls/urls.py @@ -3,10 +3,19 @@ from django.urls import path from . import views app_name = 'polls' +# urlpatterns = [ +# path('', views.index, name='index'), +# path('/', views.detail, name='detail'), +# path('/results/', views.result, name='result'), +# path('/vote/', views.vote, name='vote') +# +# ] + +# 通用视图 urlpatterns = [ - path('', views.index, name='index'), - path('/', views.detail, name='detail'), - path('/results/', views.result, name='result'), + path('', views.IndexView.as_view(), name='index'), + path('/', views.DetailView.as_view(), name='detail'), + path('/results/', views.ResultView.as_view(), name='result'), path('/vote/', views.vote, name='vote') ] diff --git a/polls/views.py b/polls/views.py index 6bba248..16bfc4c 100644 --- a/polls/views.py +++ b/polls/views.py @@ -5,47 +5,67 @@ from django.http import Http404 from .models import Choice, Question from django.template import loader from django.urls import reverse +from django.views import generic # Create your views here. -def index(request): - latest_question_list = Question.objects.order_by('-pub_date')[:5] - # output = ', '.join([q.question_text for q in latest_question_list]) - # return HttpResponse(output) - # 模板使用方式1 - # template = loader.get_template('index.html') - # context = { - # 'latest_question_list': latest_question_list, - # } - # return HttpResponse(template.render(context, request)) - # 模板使用方法2 - context = { - 'latest_question_list': latest_question_list, - } - return render(request, 'index.html', context) - - -def detail(request, question_id): - # return HttpResponse(f"You're looking at question {question_id}.") - # 添加404页面展示 方式1 - # try: - # question = Question.objects.get(pk=question_id) - # context = {'question': question} - # print(context) - # except Question.DoesNotExist: - # raise Http404("Question does not exist") - # return render(request, 'detail.html', context) - - # 添加404页面展示 方式2 - question = get_object_or_404(Question, pk=question_id) - return render(request, 'detail.html', {'question': question}) +# def index(request): +# latest_question_list = Question.objects.order_by('-pub_date')[:5] +# # output = ', '.join([q.question_text for q in latest_question_list]) +# # return HttpResponse(output) +# # 模板使用方式1 +# # template = loader.get_template('index.html') +# # context = { +# # 'latest_question_list': latest_question_list, +# # } +# # return HttpResponse(template.render(context, request)) +# # 模板使用方法2 +# context = { +# 'latest_question_list': latest_question_list, +# } +# return render(request, 'index.html', context) +# +# +# def detail(request, question_id): +# # return HttpResponse(f"You're looking at question {question_id}.") +# # 添加404页面展示 方式1 +# # try: +# # question = Question.objects.get(pk=question_id) +# # context = {'question': question} +# # print(context) +# # except Question.DoesNotExist: +# # raise Http404("Question does not exist") +# # return render(request, 'detail.html', context) +# +# # 添加404页面展示 方式2 +# question = get_object_or_404(Question, pk=question_id) +# return render(request, 'detail.html', {'question': question}) +# +# +# def result(request, question_id): +# question = get_object_or_404(Question, pk=question_id) +# return render(request, 'results.html', {'question': question}) +# # return HttpResponse(f"You're looking at the result of question {question_id}.") +# 通用视图 -def result(request, question_id): - question = get_object_or_404(Question, pk=question_id) - return render(request, 'results.html', {'question': question}) - # return HttpResponse(f"You're looking at the result of question {question_id}.") +class IndexView(generic.ListView): + template_name = 'index.html' + context_object_name = 'latest_question_list' + + def get_queryset(self): + return Question.objects.order_by('-pub_date')[:5] + + +class DetailView(generic.DetailView): + model = Question + template_name = 'detail.html' + + +class ResultView(generic.DetailView): + model = Question + template_name = 'results.html' def vote(request, question_id):