Django 模型操作-分页(七)

一、连接MySql数据库

  1、先安装MySQL

  2、再安装MySQL驱动
      使用mysqlclient
      pip install mysqlclient

如果上面的命令安装失败, 则尝试使用国内豆瓣源安装:
 pip install -i https://pypi.douban.com/simple mysqlclient

二、在settings.py中配置

 Django 模型操作-分页(七)_第1张图片

三、 book表的数据

Django 模型操作-分页(七)_第2张图片

四、手动分页和自动分页

1、函数视图

    手动分页

#手动分页
def get_pageinfo(request,page=1):
    # 每页显示6条数据
    per_page = 6

    # 分页分析
    # 数据[1,2,3,45,..100]
    # 第几页    数据范围   数据下标范围     切片
    #  page=1   1-6        0~5         [0:6]   =>   (1-1)*6  1*6
    #  page=2   7-12       6~11        [6:12]  =>   (2-1)*6  2*6
    #  page=3   13-18      12~17       [12:18] =>   (3-1)*6  3*6
    #   ..................

    # 获取所有的数据
    all=Book.objects.all()
    # 数据分页
    books=all[(page-1)*per_page:page*per_page]
    # 总个数
    count=Book.objects.count()
    # 总页数
    total_page=math.ceil(count/per_page)

    #数据范围 1,2,3,4..
    list_page=range(1,total_page+1)

    return render(request=request, template_name='show.html', context={'books':books,'listpages':list_page})

 2、show.html页面 




    
    Title
    


手动分页图书数据

  • 编号----书名------价格------日期-------出版社编号
  • {% for bk in books %}
  • {{ bk.id }} -- {{ bk.title }} -- {{ bk.price}}-- {{ bk.pub_date| date:"Y-m-d" }}-- {{ bk.publish_id}}
  • {% endfor %}

  3、运行效果 

 Django 模型操作-分页(七)_第3张图片

  (2) 自动分页 

    源码:Paginator类

Django 模型操作-分页(七)_第4张图片

     1、函数视图

#自动分页
def auto_pageinfo(request,page=1):
    # 每页显示6条数据
    per_page = 6

    # 获取所有的数据
    all=Book.objects.all()

    #使用分页器分页
    from django.core.paginator import Paginator
    paginator=Paginator(all,per_page)

    #获取第几页的数据
    books=paginator.page(page)

    # 页码范围
    #数据范围 1,2,3,4..
    list_page=paginator.page_range

    return render(request=request, template_name='autoshow.html', context={'books':books,'listpages':list_page})

    2、aushow.html页面 


自动分页图书数据

  • 编号----书名------价格------日期-------出版社编号
  • {% for bk in books %}
  • {{ bk.id }} -- {{ bk.title }} -- {{ bk.price}}-- {{ bk.pub_date| date:"Y-m-d" }}-- {{ bk.publish_id}}
  • {% endfor %}

3、配置url路径

from django.urls import path

from books import views

urlpatterns = [
    path('pages/', views.get_pageinfo,name='pages'),  #别名pages
    path('pages2/', views.auto_pageinfo,name='pages2'),  #别名pages2
    path('pages3/', views.auto_pageinfo2,name='pages3'),  #别名pages3

]

4、运行效果

Django 模型操作-分页(七)_第5张图片

五、使用分页插件Django-pure-pagination

1、安装

pip install django-pure-pagination

Django 模型操作-分页(七)_第6张图片

2、在settings.py中注册

INSTALLED_APPS = [
     .....,
    'pure_pagination',
]

3、在settings.py中配置分页切割方式

# 分页配置
PAGINATION_SETTINGS = {
    'PAGE_RANGE_DISPLAYED':2, # 当前页相邻显示几个号码页
    'MARGIN_PAGES_DISPLAYED': 1,  # 首尾各显示几个号码页
    'SHOW_FIRST_PAGE_WHEN_INVALID': True,
}

4、函数视图

#分页插件
def auto_pageinfo2(request,page=1):
    # 每页显示5条数据
    per_page =3

    # 获取所有的数据
    all=Book.objects.all()

    #使用分页器分页
    from django.core.paginator import Paginator
    paginator=Paginator(all,per_page)

    try:
        page_number = request.GET.get('page', page)
    except PageNotAnInteger:
        page_number = 1

    #获取第几页的数据
    books=paginator.page(page_number)

    # 页码范围
    # 数据范围 1,2,3,4..
    list_page = paginator.page_range

    # books.paginator.pages

    return render(request, 'list.html', {'page_obj': books,"pages":list_page})

5、模板




    
    Title
    


插件分页图书数据

  • 编号----书名------价格------日期-------出版社编号
  • {% for bk in page_obj %}
  • {{ bk.id }} -- {{ bk.title }} -- {{ bk.price }}-- {{ bk.pub_date| date:"Y-m-d" }}-- {{ bk.publish_id }}
  • {% endfor %}
{#Django-pure-pagination基础渲染方法#} {##}

6、运行效果

Django 模型操作-分页(七)_第7张图片

Django 模型操作-分页(七)_第8张图片 

你可能感兴趣的:(django,python,后端)