设为首页 加入收藏

TOP

自定义分页模板(银角大王版)(一)
2019-09-17 19:08:43 】 浏览:58
Tags:定义 模板 大王

当数据库中数据有很多,我们通常会在前端页面做分页展示。

分页的数据可以在前端页面实现,也可以在后端实现分页。

后端实现分页的原理就是每次只请求一页数据。

准备工作

我们使用脚本批量创建一些测试数据(将下面的代码保存到bulk_create.py文件中放到Django项目的根目录,直接执行即可。)

import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "about_orm.settings")

    import django
    django.setup()

    from app01 import models
    bulk_obj = (models.Publisher(name='沙河第{}出版社'.format(i)) for i in range(300))
    models.Publisher.objects.bulk_create(bulk_obj)
测试数据创建

自定义分页

def publisher_list(request):
    # 从URL中取当前访问的页码数
    try:
        current_page = int(request.GET.get('page'))
    except Exception as e:
        # 取不到或者页码数不是数字都默认展示第1页
        current_page = 1
    # 总数据量
    total_count = models.Publisher.objects.count()
    # 定义每页显示多少条数据
    per_page = 10
    # 计算出总页码数
    total_page, more = divmod(total_count, per_page)
    if more:
        total_page += 1
    # 定义页面上最多显示多少页码(为了左右对称,一般设为奇数)
    max_show = 11
    half_show = max_show // 2
    # 计算一下页面显示的页码范围
    if total_page <= max_show:  # 总页码数小于最大显示页码数
        page_start = 1
        page_end = total_page
    elif current_page + half_show >= total_page:  # 右边越界
        page_end = total_page
        page_start = total_page - max_show
    elif current_page - half_show <= 1:  # 左边越界
        page_start = 1
        page_end = max_show
    else:  # 正常页码区间
        page_start = current_page - half_show
        page_end = current_page + half_show
    # 数据索引起始位置
    data_start = (current_page-1) * per_page
    data_end = current_page * per_page

    publisher_list = models.Publisher.objects.all()[data_start:data_end]

    # 生成页面上显示的页码
    page_html_list = []
    page_html_list.append('<nav aria-label="Page navigation"><ul class="pagination">')
    # 加首页
    first_li = '<li><a href="/publisher_list/?page=1">首页</a></li>'
    page_html_list.append(first_li)
    # 加上一页
    if current_page == 1:
        prev_li = '<li><a href="#"><span aria-hidden="true">&laquo;</span></a></li>'
    else:
        prev_li = '<li><a href="/publisher_list/?page={}"><span aria-hidden="true">&laquo;</span></a></li>'.format(current_page - 1)
    page_html_list.append(prev_li)
    for i in range(page_start, page_end + 1):
        if i == current_page:
            li_tag = '<li class="active"><a href="/publisher_list/?page={0}">{0}</a></li>'.format(i)
        else:
            li_tag = '<li><a href="/publisher_list/?page={0}">{0}</a></li>'.format(i)
        page_html_list.append(li_tag)
    # 加下一页
    if current_page == total_page:
        next_li = '<li><a href="#"><span aria-hidden="true">&raquo;</span></a></li>'
    else:
        next_li = '<li><a href="/publisher_list/?page={}"><span aria-hidden="true">&raquo;</span></a></li>'.format(current_page + 1)
    page_html_list.append(next_li)
    # 加尾页
    page_end_li = '<li><a href="/publisher_list/?page={}">尾页</a></li>'.format(total_page)
    page_html_list.append(page_end_li)
    page_html_list.append('</ul></nav>')
    page_html = "".join(page_html_li
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Javascript中数组方法reduce的妙.. 下一篇类似淘宝五星点评 ,Jquery实现代..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目