Django分页(二)基于类视图分页

原来是基于函数视图分页的,现在改为类视图分页,之前的操作请参考Django分页(一)基于函数视图分页

1、重写views.py

views.py


from django.shortcuts import render
from django.views.generic import ListView

from .models import StudyMsg


# 基于类视图分页
class ScoreView(ListView):
    model = StudyMsg
    template_name = "score_display.html"
    context_object_name = "all_scores"
    paginate_by = 20 #指定每页20个数据

2、配置urls.py

urls.py


from django.contrib import admin
from django.urls import path
from page_test import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('score/', views.ScoreView.as_view(), name="score_dis"),
]

3、重写前端score_display.html

基于类视图分类提供以下变量使用:

1、paginator:和(一)Paginator的实例一样

2、page_obj:当前的page对象

3、is_paginated:和之前的has_other_pages一样

4、object_list:等同于context_object_name

score_display.html





    
    Score
    
	
	


    
      {% for score in all_scores %}
      
      {% endfor %}
      
成绩表
名字 语文成绩 数学成绩 英语成绩
{{ score.name }} {{ score.chinese }} {{ score.math }} {{ score.english }}
{% if is_paginated %} {% endif %}

4、再修改score_display.html

当数据量过大时,上面这样写就有很大问题了。

页码数量过多。因此我们需要修改

(1)、第一页和最后一页必须存在

(2)、只会展示当前页的前三页和后三页

   {% if is_paginated %}
    
    {% endif %}

Django分页(二)基于类视图分页_第1张图片

你可能感兴趣的:(Django)