1.9 使用基于类的视图

2020-07-20  本文已影响0人  gznb

1. 使用基于类的视图

基于类的视图是将 视图 实现为 Python 对象而不是函数的另一种方法。因为视图时可以调用的,它接受一个 web 请求 并且返回一个 web 响应。你也可以把你的视图定义为一个类方法。Django 为这个提供了一个 基础类视图。所有的这些都是继承于 View 类的,它处理 HTTP 方法的调度,和其他常见的功能。

在某一些用例中,基于类的视图比基于函数的视图更有优势,它们具有以下特点:

你可以在这个链接中了解更多有关 基于类的 视图的介绍。

你把 post_list 视图改变成基于类的视图,以使用 Django 提供的 通用 ListView。这个基本视图允许您列出任何类型的对象。

在你的 blog 应用程序中编辑 view.py 文件,并且添加下面的代码:

from django.views.generic import ListView



class PostListView(ListView):
    queryset = Post.published.all()
    context_object_name = 'posts'
    paginate_by = 3
    template_name = 'blog/post/list.html'

这个 基于类的视图类似于之前的 post_list 视图,在上面的代码中,你要求 ListView 去做下面的事情:

现在打开你 blog 应用程序的 urls.py 文件,注释掉前面的 post_list URl 模式,并且使用PostListView添加一个新的 URl 模式,如下所示:

urlpatterns = [
    # 文章视图
    # path('', views.post_list, name='post_list'),
    path('', views.PostListView.as_view(), name='post_list'),
    path('<int:year>/<int:month>/<int:day>/<slug:post>/', views.post_detail, name='post_detail')
]

为保持分页工作,你必须使用传递给模板的正确页面对象。 Django 的 ListView 通用视图 通过一个名为 page_obj 的变量传递选定的页面。 所以,你必须编辑您的 post/list.html 模板,以便使用正确的变量包含分页器。

{% include "pagination.html" with page=page_obj %}

在你的 浏览器中打开 http://127.0.0.1:8000/blog/,并且去验证所有的工作方式是否与前面的 post_list 使用相同。这是一个简单的基于类视图的例子,它使用 Django 提供的常见类。你可以在 第十章 建立电子学习平台 以及后续几章学习更多有关于 基于类视图的内容。

上一篇下一篇

猜你喜欢

热点阅读