一、连接MySql数据库

1、先安装MySQL

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

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

二、在settings.py中配置

三、 book表的数据

四、手动分页和自动分页

1、函数视图

手动分页

#手动分页def get_pageinfo(request,page=1):# 每页显示6条数据per_page = 6# 分页分析# 数据[1,2,3,45,..100]# 第几页数据范围 数据下标范围 切片#page=1 1-60~5 [0:6] => (1-1)*61*6#page=2 7-12 6~11[6:12]=> (2-1)*62*6#page=3 13-1812~17 [12:18] => (3-1)*63*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#ul li {width: 30%;list-style: none;padding: 10px 0px;border: 1px solid cadetblue;}#pp li {display: inline;}.ff{font-weight: bolder;}

手动分页图书数据

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

3、运行效果

(2) 自动分页

源码:Paginator类

1、函数视图

#自动分页def auto_pageinfo(request,page=1):# 每页显示6条数据per_page = 6# 获取所有的数据all=Book.objects.all()#使用分页器分页from django.core.paginator import Paginatorpaginator=Paginator(all,per_page)#获取第几页的数据books=paginator.page(page)# 页码范围#数据范围 1,2,3,4..list_page=paginator.page_rangereturn 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 %}
    {% for pa in listpages %}
  • {% endfor %}

3、配置url路径

from django.urls import pathfrom books import viewsurlpatterns = [path('pages/', views.get_pageinfo,name='pages'),#别名pagespath('pages2/', views.auto_pageinfo,name='pages2'),#别名pages2path('pages3/', views.auto_pageinfo2,name='pages3'),#别名pages3]

4、运行效果

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

1、安装

pip install django-pure-pagination

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 Paginatorpaginator=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.pagesreturn render(request, 'list.html', {'page_obj': books,"pages":list_page})

5、模板

Title#ul li {width: 30%;list-style: none;padding: 10px 0px;border: 1px solid cadetblue;}a {padding: 5px 10px;color: white;background-color: darkgray;margin: 1px; /*设置标签 a 之间的间隔*/text-decoration: none; /*去除页码数字下面的下划线*/}a:hover {color: black;background: cyan;}.current {color: black;}

插件分页图书数据

  • 编号----书名------价格------日期-------出版社编号
  • {% 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基础渲染方法#}{##}{#{{ page_obj.render }}#}{##}{% if page_obj.has_previous %} << {% else %} << {% endif %}{#Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.#}{% for page in pages %}{% if page %}{% if page == page_obj.number %}{ page }}">{{ page }}{% else %}{ page }}" class="page">{{ page }}{% endif %}{% else %}...{% endif %}{% endfor %}{% if page_obj.has_next %}{ page_obj.next_page_number }}"> >> {% else %} >> {% endif %}

6、运行效果