Django-简述generic views

Posted daemonfly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-简述generic views相关的知识,希望对你有一定的参考价值。

Use generic views: Less code is better.

These views represent a common case of basic Web development: getting data from the database according to a parameter passed in the URL, loading a template and returning the rendered template. Because this is so common, Django provides a shortcut, called the "generic views" system.

Generic views abstract common patterns to the point where you don‘t even need to write Python code to write an app.

Let‘s convert our poll app to use the generic views system, so we can delete a bunch of our own code. We‘ll just have to take a few steps to make the conversion. We will:

  1. Convert the URLconf.
  2. Delete some of the old, unneeded views.
  3. Introduce new views based on Django‘s generic views.
# polls/views.py
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 Choice, Question


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]


# def detail(request, question_id):
#     question = get_object_or_404(Question, pk=question_id)
#     return render(request, ‘polls/detail.html‘, ‘question‘: question)

class DetailView(generic.DetailView): model = Question template_name = polls/detail.html class ResultsView(generic.DetailView): model = Question template_name = polls/results.html

 

  • 每个通用视图都需要知道它将作用于什么模型(models)。这是使用model属性提供的。
  • DetailView 通用视图期望从URL捕获的主键值被称为“pk”,因此我们将泛型视图的问题id更改为pk。

 

以上是关于Django-简述generic views的主要内容,如果未能解决你的问题,请参考以下文章

django 1.9 中的 from django.views.generic.simple import direct_to_template 相当于啥

python - Django4 - 表格&generic view

python 没有PK或Slug的Django Generic DetailView

Django REST framwork-03-使用mixin和基于类的通用(generics)视图

Django Generic Views:教程中,DetailView如何自动提供变量?

重用 Django Rest Framework Generic 视图来获取它的 QuerySet