代码改变世界

自制分页模版

2018-07-10 02:02  其修远兮666  阅读(249)  评论(0)    收藏  举报
class PagerHelper:
def __init__(self,total_count,current_page,base_url,per_page=5): #默认条数5
self.total_count = total_count #封装到对象里
self.current_page = current_page
self.base_url = base_url
self.per_page = per_page

@property
def db_start(self):
return (self.current_page-1) * self.per_page

@property
def db_end(self):
return self.current_page * self.per_page

def total_page(self): #总页数
v, a = divmod(self.total_count, self.per_page)
if a != 0:
v += 1
return v

def pager_str(self): #生成一个字符串级别的分页
v = self.total_page()

pager_list = []
if self.current_page == 1:
pager_list.append('<a href = "javascript:void(0);"><<</a>')

# if self.current_page > 1: # 如果大于1,显示下一页
else:
pager_list.append('<a href = "%s?p=%s"><<</a>' % (self.base_url,self.current_page - 1))

if v <= 11:
pager_range_start = 1
pager_range_end = v
else:
if self.current_page <6:
pager_range_start = 1
pager_range_end = 11 +1
else:
pager_range_start = self.current_page - 5
pager_range_end = self.current_page + 5 + 1
if pager_range_end >v:
pager_range_start = v - 10
pager_range_end = v +1


# for i in range(pager_range_start,pager_range_end): # 循环1到V+1
for i in range(1,v+1):
print(i)
if i == self.current_page:
pager_list.append('<a class="p_active" href = "%s?p=%s">%s</a>' % (self.base_url,i, i))
else:
pager_list.append('<a href = "%s?p=%s">%s</a>' % (self.base_url,i, i))

if self.current_page == v:
pager_list.append('<a href = "javascript:void(0);">>></a>')


# if self.current_page < v: # 如果小于总页数,显示上一页
else:
pager_list.append('<a href = "%s?p=%s">>></a>' % (self.base_url,self.current_page + 1))

pager = "".join(pager_list) # 字符串拼接
return pager
######################################################################################################
def fengkong(request):
# 分页
#获取当前页
current_page = request.GET.get("p",1)
current_page = int(current_page)
total_count = models.Info_All.objects.all().count()
# 调用类的方式
obj = PagerHelper(total_count, current_page,"/fengkong",5)
pager = obj.pager_str()
infolist1 = models.Info_All.objects.filter(nid__gt=0).order_by("-datetime")
infolist = infolist1[obj.db_start:obj.db_end]

return render(request, "fengkong.html",{"infolist":infolist,"pager":pager})
#################################################################################
Html代码:
<!--分页-->
<div style="width: 100%;text-align: center; margin-top: 15px" >
<div id='page'>
<nav aria-label="Page navigation" style="text-align: center;margin-top:0px;margin-bottom: 10px;height: 40px">
<ul class="pagination">
<li></li>
<li>{{pager|safe}}</li>
<li></li>
</ul>
</nav>
</div>
</div>