Django中html里的分页显示
分页一(very low)
因为数据量过大,而又想直观便捷的查看数据,进而通过分页显示就可以完成这项工作
app中views.py
LIST=[] #全局定义一个LIST for i in range(100): #数据量为100 LIST.append(i) #使LIST里面包含0-99个自然数 def user_list(request): current_page=request.GET.get('p',1) #用户不存在默认看第一页 current_page=int(current_page) #使char型变为int型 start=(current_page-1)*10 #第一页 end=current_page*10 #最后一页 data=LIST[start:end] #使数据自动分页,每页10个数据 all_count=len(LIST) # 计算LIST的长度 count,y=divmod(all_count,10) #divmod为算法 all_count/10,商为count,余数为y if y: #y不为0 count+=1 #页数+1 page_list=[] for i in range(1,count+1): if i==current_page: #i==页数 temp='<a class="page active" href="/user_list/?p=%s">%s</a>'%(i,i) #点击页数时,通过css使其页数栏变色 else: temp='<a class="page" href="/user_list/?p=%s">%s</a>'%(i,i) page_list.append(temp) page_str=''.join(page_list) #以空的字符串将页数连接起来 from django.utils.safestring import mark_safe page_str=mark_safe(page_str) #使page_str为安全 return render(request,'user_list.html',{'li':data,'page_str':page_str})
html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .pagination .page{ display: inline-block; padding: 5px; background-color: lavender; color: black; margin: 10px; } .pagination .page .active{ background-color: red; } </style> </head> <body> <ul> {% for item in li %} {% include 'li.html' %} {% endfor %} </ul> <div class="pagination"> {{ page_str }} </div> </body> </html>
li.html
<li>{{ item }}</li>
分页二(一般low)
LIST = [] for i in range(200): LIST.append(i) def user_list(request): current_page = request.GET.get('p', 1) # 用户不存在默认看第一页 current_page = int(current_page) dighter = 10 start = (current_page - 1) * dighter end = current_page * dighter data = LIST[start:end] all_count = len(LIST) count, y = divmod(all_count, 10) if y: count += 1 page_list = [] page_num = 11 if all_count < page_num: #如果总页数小于11页 start_index = 1 #起始页为1 end_index = all_count + 1 #终止页为总页数 else: if current_page <= (page_num + 1) / 2: #如果当前页小于6页 start_index = 1 #起始页为1 end_index = 11 + 1 #终止页为11页 else: start_index = current_page - (page_num - 1) / 2 #起始页为当前页-5 end_index = current_page + (page_num - 1) / 2 + 1 #终止页为当前页+5 if (current_page + (page_num - 1) / 2) > all_count: #如果当前页+5大于总页数 start_index = all_count - page_num + 1 #起始页为总页数-11+1 end_index = all_count + 1 #终止页为总页数 if current_page == 1: #如果当前页等于第一页 prev = '<a class="page" href="#">上一页</a>' #则停止向前索引 else: prev = '<a class="page active" href="/user_list/?p=%s">上一页</a>' % (current_page - 1) #否则可以按上一页向前进行索引 page_list.append(prev) for i in range(int(start_index), int(end_index)): #起始页-终止页数为整数 if i == current_page: #如果i为当前页 temp = '<a class="page active" href="/user_list/?p=%s" >%s</a>' % (i, i) # 将当前的页数序号加上颜色 else: temp = '<a class="page" href="/user_list/?p=%s">%s</a>' % (i, i) # 没有选定的其他页数不加颜色 page_list.append(temp) if current_page == all_count: #如果当前页为总页数 prev = '<a class="page" href="#">下一页</a>' #停止索引 else: prev = '<a class="page active" href="/user_list/?p=%s">下一页</a>' % (current_page + 1) #否则可以按下一页向下进行索引 page_list.append(prev) jump = """ <input type="text" /><input type="button" value="确定" onclick="jumpTo(this,'/user_list/?p=')" > #跳转至...页 <script> function jumpTo(ths,base){ #base为/user_list/?p= var val=ths.previousSibling.value; #获取text框里的数值 location.href=base + val ; #/user_list/?p= + text框里的内容进行跳转 } </script> """ page_list.append(jump) page_str = ''.join(page_list) from django.utils.safestring import mark_safe page_str = mark_safe(page_str) return render(request, 'user_list.html', {'li': data, 'page_str': page_str})
分页三(一般般)
###########将分页二变为面向对象编程############# class Page: def __init__(self,current_page,data_count,per_page_count=10,page_num=11): self.current_page=current_page self.data_count=data_count self.per_page_count=per_page_count self.page_num=page_num def start(self): return (self.current_page-1)*self.per_page_count def end(self): return self.current_page*self.per_page_count @property def all_count(self): v = len(LIST) v, y = divmod(self.data_count, self.per_page_count) if y: v += 1 return v def page_str(self,base_url): page_list = [] if self.all_count < self.page_num: start_index = 1 end_index = self.all_count + 1 else: if self.current_page <= (self.page_num + 1) / 2: start_index = 1 end_index = 11 + 1 else: start_index = self.current_page - (self.page_num - 1) / 2 end_index = self.current_page + (self.page_num - 1) / 2 + 1 if (self.current_page + (self.page_num - 1) / 2) > self.all_count: start_index = self.all_count - self.page_num + 1 end_index = self.all_count + 1 if self.current_page == 1: prev = '<a class="page" href="#">上一页</a>' else: prev = '<a class="page active" href="%s?p=%s">上一页</a>' % (base_url,self.current_page - 1) page_list.append(prev) for i in range(int(start_index), int(end_index)): if i == self.current_page: temp = '<a class="page active" href="%s?p=%s" >%s</a>' % (base_url,i, i) else: temp = '<a class="page" href="%s?p=%s">%s</a>' % (base_url,i, i) page_list.append(temp) if self.current_page == self.all_count: prev = '<a class="page" href="#">下一页</a>' else: prev = '<a class="page active" href="%s?p=%s">下一页</a>' % (base_url,self.current_page + 1) page_list.append(prev) jump = """ <input type="text" /><input type="button" value="确定" onclick="jumpTo(this,'%s?p=')" > <script> function jumpTo(ths,base){ var val=ths.previousSibling.value; location.href=base + val ; } </script> """%(base_url) page_list.append(jump) page_str = ''.join(page_list) from django.utils.safestring import mark_safe page_str = mark_safe(page_str) return page_str LIST=[] for i in range(200): LIST.append(i) def user_list(request): current_page=request.GET.get('p',1) #用户不存在默认看第一页 current_page=int(current_page) page_obj=Page(current_page,len(LIST)) data=LIST[page_obj.start():page_obj.end()] page_str=page_obj.page_str("/user_list/") return render(request,'user_list.html',{'li':data,'page_str':page_str})