use general view for code reuse

main
roger 3 years ago
parent 7e7dc38c6f
commit 5bbfa35af9
  1. 15
      polls/urls.py
  2. 90
      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 = { # # context = {
# 'latest_question_list': latest_question_list, # # 'latest_question_list': latest_question_list,
# } # # }
# return HttpResponse(template.render(context, request)) # # return HttpResponse(template.render(context, request))
# 模板使用方法2 # # 模板使用方法2
context = { # context = {
'latest_question_list': latest_question_list, # 'latest_question_list': latest_question_list,
} # }
return render(request, 'index.html', context) # return render(request, 'index.html', context)
#
#
def detail(request, question_id): # def detail(request, question_id):
# return HttpResponse(f"You're looking at question {question_id}.") # # return HttpResponse(f"You're looking at question {question_id}.")
# 添加404页面展示 方式1 # # 添加404页面展示 方式1
# try: # # try:
# question = Question.objects.get(pk=question_id) # # question = Question.objects.get(pk=question_id)
# context = {'question': question} # # context = {'question': question}
# print(context) # # print(context)
# except Question.DoesNotExist: # # except Question.DoesNotExist:
# raise Http404("Question does not exist") # # raise Http404("Question does not exist")
# return render(request, 'detail.html', context) # # return render(request, 'detail.html', context)
#
# 添加404页面展示 方式2 # # 添加404页面展示 方式2
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, '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): 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