python中的分页封装

utils文件夹下面的pagination

"""
自定义分页组件
"""
import math
from django.utils.safestring import mark_safe
class Pagination(object):
    def __init__(self, request,queryset, page_size=20,page_param="page",plus=5):
        page =  request.GET.get(page_param,"1")
        if page.isdecimal():
            page = int(page)
        else:
            page = 1
        self.page = page
        self.page_size = page_size
        self.start = (page - 1) * page_size
        self.end = page * page_size
        self.page_queryset = queryset[self.start: self.end]
        page_count = queryset.count()
        total = math.ceil(page_count / page_size)
        self.total = total
        self.plus = plus
        # print(total)
    def html(self):
        # plus = 5
        if self.total <= 2 * self.plus + 1:
            # 当前页面比较少
            start = 1
            end = self.total
        else:
            #     页数比较多的时候
            if self.page <= self.plus:
                start = 1
                end = 2 * self.plus
            else:
                if (self.page + self.plus) > self.total:
                    start = self.total - 2 * self.plus
                    end = self.total
                else:
                    start = self.page - self.plus
                    end = self.page + self.plus
        # 生成页码
        dict_list_str = []
        if self.page > 1:
            prev = '<li><a href="?page={}">《</a></li>'.format(self.page - 1)
        else:
            prev = '<li><a href="?page={}">《</a></li>'.format(1)
        dict_list_str.append(prev)

        for i in range(start, end + 1):
            if i == self.page:
                ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i, i)
            else:
                ele = '<li><a href="?page={}">{}</a></li>'.format(i, i)

            dict_list_str.append(ele)

        if self.page < self.total:
            prev = '<li><a href="?page={}">》</a></li>'.format(self.page + 1)
        else:
            prev = '<li><a href="?page={}">》</a></li>'.format(self.total)
        dict_list_str.append(prev)
        page_string = mark_safe(''.join(dict_list_str))
        return page_string

view.py下面的调分页

def prettynum_list(request):
    # 页码
    dict_list = {}
    value = request.GET.get('q','')
    if value :
        dict_list['mobile__contains'] = value
    queryset= PrettyNum.objects.filter(**dict_list)
    page_object = Pagination(request,queryset,page_size=20)
    queryset = PrettyNum.objects.all()

    page_queryset = page_object.page_queryset
    # print(page_count)
    page_string = page_object.html()

    # 当前页
    return render(request,'prettynum_list.html' ,{'pretty_list':page_queryset,'value':value,'page_string':page_string,})

html页面的展示

{% extends 'layout.html' %}
    {% block content %}
 <div class="container">
    <div style="margin-bottom:10px">
      <a class="btn btn-success" href="/prettynum/add/">
        <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>新建靓号</a>
        <div style="float:right;width:300px">
                    <form method="get">
          <div class="input-group">

                  <input type="text" class="form-control" value="{{value}}" name="q" placeholder="Search for...">
                    <span class="input-group-btn">
                      <button class="btn btn-default glyphicon " type="submit">
                          <span class="glyphicon glyphicon-zoom-in" aria-hidden="true"></span>
                      </button>
                    </span>

          </div>
       </form>
        </div>
    </div>
    <div>
      <div class="panel panel-default">
      <!-- Default panel contents -->
      <div class="panel-heading"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>用户列表</div>
      <!-- Table -->
      <table class="table table-bordered">
        <thead>
          <tr>
            <th>ID</th>
            <th>手机号</th>
            <th>价格</th>
            <th>级别</th>
            <th>状态</th>
            <th>编辑</th>

          </tr>
        </thead>
        <tbody>
        {% for obj in pretty_list %}
        <tr>
            <th>{{obj.id}}</th>
            <th>{{obj.mobile}}</th>
            <th>{{obj.price}}</th>
            <th>{{obj.get_level_display}}</th>
            <th>{{obj.get_status_display}}</th>
            <th>
                <a href="/prettynum/{{obj.id}}/edit/" class="btn btn-info  btn-xs">编辑</a>
                <a href="/prettynum/delete/?nid={{obj.id}}" class="btn btn-danger  btn-xs">删除</a>
            </th>

        </tr>
        {% endfor %}
        </tbody>
      </table>
    </div>
    </div>
     <div class="bs-example" data-example-id="disabled-active-pagination" style="text-align:center">
    <nav aria-label="...">
      <ul class="pagination">
          {{page_string}}
<!--          {{page_str_list}}-->
<!--        <li ><a href="?page=1">1 <span class="sr-only">(current)</span></a></li>-->
<!--        <li><a href="?page=2">2</a></li>-->
<!--        <li><a href="?page=3">3</a></li>-->
<!--        <li><a href="?page=4">4</a></li>-->
<!--        <li><a href="?page=5">5</a></li>-->

     </ul>
   </nav>
  </div>
  </div>
    {% endblock %}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值