Django 自定义分页实现

Django 自定义分页实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2017/9/9


class Page(object):
def __init__(self, current_page, all_count, base_url, per_page=10, pager_page_count=11):
"""
:param current_page: 当前页
:param all_count: 数据总条数
:param base_url: 分页的url
:param per_page: 每页显示的数据条数
:param pager_page_count: 每页显示的页码数量
"""
self.current_page = current_page
self.per_page = per_page
self.all_count = all_count
self.base_url = base_url
self.pager_page_count = pager_page_count
pager_count, b = divmod(all_count, per_page)
if b != 0:
pager_count += 1
self.pager_count = pager_count

@property
def start(self):
"""
数据库获取值的起始索引位置
:return:
"""
return (self.current_page - 1) * self.per_page

@property
def end(self):
"""
数据库获取值的结束索引位置
:return:
"""
return self.current_page * self.per_page

def page_html(self):
"""
渲染的HTML页码
:return:
"""
# 页码
pager_page_count = self.pager_page_count
half_pager_page_count = int(pager_page_count / 2)

if self.pager_count < self.pager_page_count:
pager_start = 1
pager_end = self.pager_count
else:
# 数据较多,页码超过11,最少110条
if self.current_page <= half_pager_page_count:
pager_start = 1
pager_end = pager_page_count
else:
if (self.current_page + half_pager_page_count) > self.pager_count:
pager_start = self.pager_count - pager_page_count + 1
pager_end = self.pager_count
else:
pager_start = self.current_page - half_pager_page_count
pager_end = self.current_page + half_pager_page_count
page_list = []
if self.current_page <= 1:
# prev = '<a href="#">上一页</a>'
prev = '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>'
else:
# prev = '<a href="%s?page=%s">上一页</a>' % (self.base_url, self.current_page - 1,)
prev = '<li><a href="%s?page=%s" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>' % \
(self.base_url, self.current_page - 1)
page_list.append(prev)
for i in range(pager_start, pager_end + 1):
if self.current_page == i:
# tpl = '<a class="active" href="%s?page=%s">%s</a>' % (self.base_url, i, i)
tpl = '<li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i)
else:
# tpl = '<a href="%s?page=%s">%s</a>' % (self.base_url, i, i)
tpl = '<li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i)
page_list.append(tpl)

if self.current_page >= self.pager_count:
# nex = '<a href="#">下一页</a>'
nex = '<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
else:
# nex = '<a href="%s?page=%s">下一页</a>' % (self.base_url, self.current_page + 1,)
nex = '<li><a href="%s?page=%s" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>' % \
(self.base_url, self.current_page + 1)
page_list.append(nex)
page_str = "".join(page_list)
return page_str

本文标题:Django 自定义分页实现

文章作者:shuke

发布时间:2020年04月20日 - 14:04

最后更新:2020年04月20日 - 14:04

原始链接:https://shuke163.github.io/2020/04/20/Django-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E9%A1%B5%E5%AE%9E%E7%8E%B0/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:Django 自定义分页实现

文章作者:shuke

发布时间:2020年04月20日 - 14:04

最后更新:2020年04月20日 - 14:04

原始链接:https://shuke163.github.io/2020/04/20/Django-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E9%A1%B5%E5%AE%9E%E7%8E%B0/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%