在Django自定义翻页这篇文章中,我们介绍了如何在django中自定义分页显示,但是BUG很多,我这里不在一一例举,相信你自己在尝试的时候会发现很不完善,那么对于bug我们需要修改代码,让翻页更加完美,代码参考:
LIST=[]
for i in range(2333):
LIST.append(i)
class Page():
def __init__(self,cur_page,url_page='/index/?p=',count_page=10):
self.cur_page=cur_page #当前页码数-浏览器中的页码
self.url_page=url_page #翻页URL
self.count_page=count_page #显示的页码数量
self.all_list = len(LIST) #数据的总数量
@property
def start(self):
return (self.cur_page - 1) * 10 + 1 #从1开始
@property
def end(self):
return (self.cur_page * 10) + 1 #到11结束
@property
def content(self):
count, remainder = divmod(self.all_list, 10) # 一个为商,第二个为余数
if remainder: # 如果all_list除以10 存在余数,需要重新生成一页展示
count += 1
page_list = []
if self.cur_page==1 or self.cur_page>count:
previous_page = f'<a class="page hide" href="{self.url_page}{self.cur_page - 1}">上一页</a>'
else:
previous_page = f'<a class="page" href="{self.url_page}{self.cur_page - 1}">上一页</a>'
page_list.append(previous_page)
if count < 11:
start_page=1
end_page=self.cur_page
else: #总页数大于11
if self.cur_page<=6: #判断当前页码数 是否小于等于6
start_page =1
end_page = 11
else:
start_page = self.cur_page-4
end_page = self.cur_page+4+1
if self.cur_page+5>count:
end_page=count+1
for i in range(start_page,end_page): # 生成准确的页数
if i == self.cur_page: #当前页码高亮显示
tem = f'<a class="page active" href="{self.url_page}{i}">{i}</a>'
else :
if self.cur_page>count:
tem = ''
else:
tem=f'<a class="page" href="{self.url_page}{i}">{i}</a>'
page_list.append(tem)
if self.cur_page<count:
next_page = f'<a class="page " href="{self.url_page}{self.cur_page + 1}">下一页</a>'
else:
next_page=''
page_list.append(next_page)
#实现页码数跳转 定义js代码
js = """
<input type="text"/><a class="page" onclick="PageTo(this,'/index/?p=');">跳转</a>
<script>
function PageTo(ths,base){
var strip_page=ths.previousSibling.value;
location.href=base+strip_page;
}
</script>
"""
page_list.append(js)
page_str = "".join(page_list) # 将列表转换为字符串
page_html = mark_safe(page_str) # 将标签转换为html的安全标签
return page_html
def index(request):
cur_page=int(request.GET.get('p',1)) #获取的p为字符串,直接转换为int
obj=Page(cur_page)
data = LIST[obj.start:obj.end] #[1:11]、[11:21]...
return render(request,'index.html',{'li':data,'page_html':obj.content})
为了代码有更好的可读性,可以把所有的和页码有关的代码放到一个单独的py文件中,创建一个类,在views.py中使用的时候只需要导入就可以了。
代码的解释也非常简单,就是来回的做一些判断,确保页码数的显示是合理的,在这里我不在详细介绍,都在注释中,可以自己看一下!
声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!