欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记一次Django中的ListView学习笔记

程序员文章站 2022-04-28 18:32:58
...

编写一个电影列表的试图

views.py

from django.views.generic import ListView
from .models import Movie

class MovieList(ListView):
    model = Movie  # model
    template_name = "movie.html"  # 加载的模板
    context_object_name = "movies"  # 从数据库中取出的数据对象
    paginate_by = 10  # 每页显示列表的个数
    ordering = "id"  # 取出的数据按照哪个字段排序

只需要实现一个继承自ListView的类即可,什么都不用管,就可以实现列表页的功能


urls.py

urlpatterns = [
    path("", views.MovieList.as_view(), name="movie_index"),
]

下面具体分析一下这个列表视图

首先我们要明白列表视图长什么样,具体的可参考豆瓣TOP250,下面只用他的页码切换页来做分析。
记一次Django中的ListView学习笔记
1、首先我们要获取列表的当前页
2、我们还需要知道上一页或者下一页的具体页数
3、点击上一页或者上一页可以实现切换页面
4、判定是否还有上一页,来实现上一页按钮是否可以被点击(下一页同理)

理清上面几个问题再来看列表视图就一点都不难了。就是一些参数我们可能记不住而已,但是我们能大概理清楚列表视图到底是来干嘛的,怎么干的问题。

参数分析

model = Movie  # model
template_name = "movie.html"  # 加载的模板
context_object_name = "movies"  # 从数据库中取出的数据对象
paginate_by = 10  # 每页显示列表的个数
ordering = "id"  # 取出的数据按照哪个字段排序
page_kwarg = 'p'  # 默认是page,就是url哪个?后面的参数

上面的几个就不分析了,固定的,也很好记。

下面分析一下Paginator和Page(page_obj)常用的属性和方法
Paginator

  1. count 总共有多少条数据
  2. num_pages 总共有多少页
  3. page_range 返回的是range的可迭代对象

Page

  1. has_next:是否还有下一页
  2. has_previous:是否还有上一页
  3. next_page_number:下一页的页码
  4. previous_page_number:上一页的页码
  5. number:当前页

有没有发现这些常用的数据刚好和我们分析一个列表页用来干什么的怎么干很相似呢。