• Python--day71--分页功能


    分页功能代码:

     1 from django.shortcuts import render
     2 
     3 # Create your views here.
     4 
     5 from app01 import models
     6 
     7 
     8 
     9 def books(request):
    10     #从URL取参数
    11     page_num = request.GET.get("page")
    12     print(page_num,type(page_num))
    13     # 每一页显示多少条数据
    14     per_page = 10
    15     # 总数据是多少
    16     total_count = models.Book.objects.all().count()
    17     # 总共需要多少页码来展示
    18     total_page, m = divmod(total_count, per_page)
    19     if m:
    20         total_page += 1
    21     try:
    22         page_num = int(page_num)
    23         # 如果输入的页码数超过了最大的页码数,默认返回最后一页的数据
    24         if page_num > total_page:
    25             page_num = total_page
    26     except Exception as e:
    27         #当输入的页码不是正经数字的时候,默认返回第一页的数据
    28         page_num = 1
    29 
    30 
    31     #定义两个变量保存数据从哪儿取到哪儿
    32     data_start = (page_num-1)*10
    33     data_end = page_num*10
    34 
    35 
    36 
    37     #页面总共展示多少页码
    38     max_page = 11
    39     if total_page < max_page:
    40         max_page = total_page
    41 
    42 
    43     half_max_page = max_page // 2
    44     #页面上展示的页码从哪儿开始
    45     page_start = page_num - half_max_page
    46     #页面上展示的页码到哪儿结束
    47     page_end = page_num + half_max_page
    48     #如果当前页减一半,比1还小
    49     if page_start <= 1:
    50         page_start = 1
    51         page_end = max_page
    52 
    53     #如果当前页加一半比总页码数还大
    54     if page_end >= total_page:
    55         page_end = total_page
    56         page_start = total_page - max_page +1
    57 
    58     all_book = models.Book.objects.all()[data_start:data_end]
    59 
    60     #自己拼接分页的HTML代码
    61     html_str_list = []
    62     #加上第一页
    63     html_str_list.append('<li><a href="/books/?page=1">首页</a></li>')
    64     #加上一个上一页的标签
    65     #判断,如果是第一页就没有上一页了
    66     if page_num <= 1:
    67         html_str_list.append(' <li class="disabled"><a href="#" ><span aria-hidden="true">&laquo;</span></a><li>')
    68     else:
    69         #加上一个上一页的功能
    70         html_str_list.append(' <li><a href="/books/?page={}" ><span aria-hidden="true">&laquo;</span></a><li>'.format(page_num-1))
    71 
    72     for i in range(page_start,page_end +1):
    73         #如果是当前页就加一个active样式类
    74         # if i == page_num:
    75         #     tmp = '<li class="active"><a href="/books/?page={0}">{0}</a></li>'.format(i)
    76         # else:
    77         if i == page_num:
    78             tmp = '<li class="active"><a href="/books/?page={0}">{0}</a></li>'.format(i)
    79         else:
    80             tmp = '<li><a href="/books/?page={0}">{0}</a></li>'.format(i)
    81 
    82         html_str_list.append(tmp)
    83 
    84     #加上一个下一页的标签
    85     #判断,如果是最后一页,就没有下一页
    86     if page_num >= total_page:
    87         html_str_list.append('<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a><li>')
    88     else:
    89         html_str_list.append('<li><a href="/books/?page={}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a><li>'.format(page_num+1))
    90     #加上最后一页
    91     html_str_list.append('<li><a href="/books/?page={0}">末页</a></li>'.format(total_page))
    92 
    93     page_html = "".join(html_str_list)
    94 
    95 
    96 
    97     return render(request,'books.html',{'books':all_book,"page_html":page_html})
  • 相关阅读:
    vue系列【element ui table中render函数加if的使用】
    vue系列【watch的使用方法及immdiate、deep解决组件传值中数据改变视图不更新等常见问题】
    vue系列【element ui 处理图片流及实现多张图片轮播】
    webpack系列【webpack的基本使用及配置项】
    vue系列【element ui 行内三元表达式的使用及实现行内switch按钮加文字】
    vue系列【vue路由$route.go(1)返回使用KeepAlive保持原页面数据不更新】
    vue系列【post 和 get 请求书写及使用】
    vue系列【vue+element 三元表达式多条件实现功能】
    vue系列【sessionStorage的setItem和getItem使用】
    vue系列【vue swiper插件实现图片轮播效果】
  • 原文地址:https://www.cnblogs.com/xudj/p/10671643.html
Copyright © 2020-2023  润新知