总是显示设定数量的页码
这是view中总数据库中取得第page也的数据的代码 django中实现mysql中的limit功能用的是python的切片功能,也就是[n:m] 所以根据给定的一页显示的记录数,和页码,就能计算出起始位置和结束位置,就可以利用切片功能实现对mysql数据库的分页。 不过这种实现方式对于偏移量巨大的数据库来说效率比较低,对于超大数据库,建议用对id的子查询来实现。
page_size = 15
count = Register.objects.all().count()
page_count = count // page_size
if count % page_size > 0:
page_count = page_count + 1
if page < 1:
page = 1
if page > page_count:
page = page_count
limit_left = (page-1) * page_size
limit_right = page * page_size
records = Register.objects.all().order_by('-petitiondate')[limit_left:limit_right]
以下是显示页码的程序,显示页码和数据集无关,只需给出当前页和总页数即可 view中调用分页的代码 page是当前页码 page_count是总页码数 11是当前显示多少个页码
page_str = create_page(page, page_count, 11, '上一页', '下一页')
view生成分页代码,此函数返回一个html字符串,直接在模板中显示返回值的变量即可
def create_page(page, page_count, show_num, last_page_text, next_page_text):
half = show_num // 2
the_first_page = '<a href="1">1</a>'
the_last_page = '<a href="' + str(page_count) + '">' + str(page_count) + '</a>'
if page > 1:
last_page = '<a href="' + str(page - 1) + '">' + last_page_text + '</a>'
else:
last_page = '<span class="disable">' + last_page_text + '</span>'
if page < page_count:
next_page = '<a href="' + str(page + 1) + '">' + next_page_text + '</a>'
else:
next_page = '<span class="disable">' + next_page_text + '</span>'
page_num_str = ''
if page > half:
if page > page_count - half:
begin_page = page_count - show_num + 1
else:
begin_page = page - half
else:
begin_page = 1
for i in range(begin_page, page):
page_num_str += '<a href="' + str(i) + '">' + str(i) + '</a>'
page_num_str += '<a class="active" href="#">' + str(page) + '</a>'
if (page_count - page) >= half:
end_page = page + half
else:
end_page = page_count
if end_page <= show_num:
end_page = show_num
for i in range(page + 1, end_page + 1):
page_num_str += '<a href="' + str(i) + '">' + str(i) + '</a>'
page_str = the_first_page + last_page + page_num_str + next_page + the_last_page
return page_str
分页的scss代码
#pages{
margin-top:10px;
float:left;
a,span{
padding:3px 8px;
margin-left:2px;
margin-right:2px;
border:1px solid #ccc;
}
a:hover,a:visited,a{
text-decoration:none;
color:$link-color;
}
a.active{
color:#ccc;
font-weight:bold;
}
}
|