Django-自定义分页2

views


class PageInfo(object):
    def __init__(self, cur_page,all_count, per_page,base_url, show_page=11):
        """

        :param cur_page: 当前页码
        :param all_count: 数据库总行数
        :param per_page: 每页显示行数
        """
        try:
            self.cur_page = int(cur_page)
        except Exception as e:
            self.cur_page = 1
        self.per_page = per_page
        div, mod = divmod(all_count, per_page)
        if mod:
            div += 1
        self.all_pager = div
        self.base_url = base_url
        self.show_page = show_page

    def start(self):
        return (self.cur_page - 1) * self.per_page

    def end(self):
        return self.cur_page * self.per_page

    def pager(self):
        # v = '<a href="/app01/custom/?page=1">1</a>'
        # return v
        page_list = []



        # 展示11条,前5后5
        half = self.show_page//2

        # 如果总数据小于11页,展示所有页码
        if self.all_pager <= self.show_page:
            begin =1
            stop = self.all_pager + 1

        else:
            # 如果当前页<=5,用于显示前面11条
            if self.cur_page <= half:
                begin =1
                stop = self.show_page + 1

            # 如果当前页是末页前5页,那展示末页前11条
            elif self.cur_page + half >= self.all_pager:
                begin = self.all_pager - self.show_page + 1
                stop = self.all_pager + 1

            # 中间页码
            else:
                begin = self.cur_page - half
                stop = self.cur_page + half + 1


        # 上一页按钮
        if self.cur_page >1:
            pre ='<a href="%s?page=%s">上一页</a>' % (self.base_url,self.cur_page-1)
        else:
            pre ='<a href="#">上一页</a>'

        page_list.append(pre)


        # 中间页码按钮
        for i in range(begin,stop):

            # 当前页码选中效果
            if i == self.cur_page:
                tmp = '<a style="background:red;" href="%s?page=%s">%s</a>' % (self.base_url,i, i)
            else:
                tmp = '<a href="%s?page=%s">%s</a>' %(self.base_url,i,i)
            page_list.append(tmp)

        # 下一页按钮
        if self.cur_page <self.all_pager:
            nex ='<a href="%s?page=%s">下一页</a>' % (self.base_url, self.cur_page+1)
        else:
            nex ='<a href="#">下一页</a>'

        page_list.append(nex)

        return ''.join(page_list)

# 自定义分页功能
def custom(req):
    all_count = models.UserInfo.objects.all().count()

    cur_page = req.GET.get('page')
    page_info = PageInfo(cur_page,all_count,10,'/app01/custom/')

    start = page_info.start()
    end = page_info.end()
    user_list = models.UserInfo.objects.all()[start:end]

    return render(req, 'custom.html', {'user_list':user_list, 'page_info':page_info})

template

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for user in user_list %}
            <li>{{ user.user }}</li>
        {% endfor %}
    </ul>

    {{ page_info.pager|safe }}


</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值