use general view for code reuse

main
roger 3 years ago
parent 7e7dc38c6f
commit 5bbfa35af9
  1. 15
      polls/urls.py
  2. 84
      polls/views.py

@ -3,10 +3,19 @@ from django.urls import path
from . import views from . import views
app_name = 'polls' app_name = 'polls'
# urlpatterns = [
# path('', views.index, name='index'),
# path('<int:question_id>/', views.detail, name='detail'),
# path('<int:question_id>/results/', views.result, name='result'),
# path('<int:question_id>/vote/', views.vote, name='vote')
#
# ]
# 通用视图
urlpatterns = [ urlpatterns = [
path('', views.index, name='index'), path('', views.IndexView.as_view(), name='index'),
path('<int:question_id>/', views.detail, name='detail'), path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('<int:question_id>/results/', views.result, name='result'), path('<int:pk>/results/', views.ResultView.as_view(), name='result'),
path('<int:question_id>/vote/', views.vote, name='vote') path('<int:question_id>/vote/', views.vote, name='vote')
] ]

@ -5,47 +5,67 @@ from django.http import Http404
from .models import Choice, Question from .models import Choice, Question
from django.template import loader from django.template import loader
from django.urls import reverse from django.urls import reverse
from django.views import generic
# Create your views here. # Create your views here.
def index(request): # def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5] # latest_question_list = Question.objects.order_by('-pub_date')[:5]
# output = ', '.join([q.question_text for q in latest_question_list]) # # output = ', '.join([q.question_text for q in latest_question_list])
# return HttpResponse(output) # # return HttpResponse(output)
# 模板使用方式1 # # 模板使用方式1
# template = loader.get_template('index.html') # # template = loader.get_template('index.html')
# # context = {
# # 'latest_question_list': latest_question_list,
# # }
# # return HttpResponse(template.render(context, request))
# # 模板使用方法2
# context = { # context = {
# 'latest_question_list': latest_question_list, # 'latest_question_list': latest_question_list,
# } # }
# return HttpResponse(template.render(context, request)) # return render(request, 'index.html', context)
# 模板使用方法2 #
context = { #
'latest_question_list': latest_question_list, # def detail(request, question_id):
} # # return HttpResponse(f"You're looking at question {question_id}.")
return render(request, 'index.html', context) # # 添加404页面展示 方式1
# # try:
# # question = Question.objects.get(pk=question_id)
def detail(request, question_id): # # context = {'question': question}
# return HttpResponse(f"You're looking at question {question_id}.") # # print(context)
# 添加404页面展示 方式1 # # except Question.DoesNotExist:
# try: # # raise Http404("Question does not exist")
# question = Question.objects.get(pk=question_id) # # return render(request, 'detail.html', context)
# context = {'question': question} #
# print(context) # # 添加404页面展示 方式2
# except Question.DoesNotExist: # question = get_object_or_404(Question, pk=question_id)
# raise Http404("Question does not exist") # return render(request, 'detail.html', {'question': question})
# return render(request, 'detail.html', context) #
#
# 添加404页面展示 方式2 # def result(request, question_id):
question = get_object_or_404(Question, pk=question_id) # question = get_object_or_404(Question, pk=question_id)
return render(request, 'detail.html', {'question': question}) # 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): class IndexView(generic.ListView):
question = get_object_or_404(Question, pk=question_id) template_name = 'index.html'
return render(request, 'results.html', {'question': question}) context_object_name = 'latest_question_list'
# return HttpResponse(f"You're looking at the result of question {question_id}.")
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): def vote(request, question_id):

Loading…
Cancel
Save