python3 django动态分页引发的list切片下标越界问题

起先是扒了一个包,动态分页的,但这个包分页之前要加载全部的数据,我这东西后台是个爬虫,不一定浏览的完所以这么做有点浪费资源,于是我改造了一下。

# :param obj_count: 获得 条目总数# :param obj_perpage: 定义 每页显示条目数# :param pagetag_current: 获得 当前页码# :param pagetag_dsp_count: 定义 显示多少个页码

这是包的参数 根据这些实现分页
obj_count = len(你的数据) 之前我是爬完所有数据传进来,现在改成直接爬总条目。

obj_count = 总条目

然后之前给页面的值是这样obj=你的数据[xx.obj_slice_start:xx.obj_slice_end]
xx.obj_slice_start和xx.obj_slice_end 就是通过切片给页面传递值

我看了下代码,这俩参数是通过当前页码-1*条目数,当前页码*条目数获得的。比如说每页20条,当前第2页,就是你的数据[2-1*20:2*20]这样。

但我改完之后因为这个时候还没有数据,所以不能这么用。obj = get_data(page_list[int(pagetag_current) - 1])这是改完之后的,自己那俩函数就不贴了,写的比较丑。思路就是page_list里边是爬取目标的所有分页,根据pagetag_current也就是当前页码作为下标(0起所以-1)确定爬取的页面,然后用get_data爬取这个页面。

最后出问题了,排查发现是我搞错了每页的显示条目,我设定的是20,但page_list里每一页展示的是25条,所以比如说总条目69,会分成4页,但我page_list里只有3页,就是3个元素,加载尾页会直接越界 pagetag_current=4(尾页)(get_data(page_list[pagetag_current) - 1  也就是3 提示越界 实际只有0 1 2]))。

解决方式就是每页显示的条目数=25,然后想了一下,原作者那种方式应该也会面临越界问题,比如总条目69(为什么总要用69做例子 因为我喜欢 你懂得),用他切片的方式就是0:20 20:40 40:60 60:80还是大牛想的多,不像我碰到问题才去琢磨处理(虽然最后那不算处理)。赶紧去看看他的代码学习一下怎么处理的,翻了2遍也没找到处理越界的地方,最后疑惑的加了输出测试了一下,居然就是直接给的越界下标,查了一下,我擦,原来切片越界是不报的。

不管咋说,也算是学了点新东西,虽然这个动态分页还是不够完美,但也算改造成功了,加载一页爬一页数据,不像之前分页前就得爬完所有数据,不好地方就是现在每页显示的条目要根据爬取页面的一致。下一步计划把get_data写的智能一些,可以精准的获取数据。
 



原文地址:https://www.cnblogs.com/cerutodog/p/10024245.html

时间: 2024-10-16 19:43:09

python3 django动态分页引发的list切片下标越界问题的相关文章

Tornado-基于正则的路由和动态分页

概览 这一小节涉及了三部分内容: 1.动态分页设计 2.基本的路由系统以及基于正则的路由 3.模块引擎的继承和导入 4.web项目文件夹和ReuquestHandler的分类 5.跨站脚本攻击 文件结构 Python代码 start.py from tornado.ioloop import IOLoop import tornado.web from controllers import account from controllers import home from controllers

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

python3+django使用pymysql

默认python3+django使用,sqlite3 如果直接在setting.py中修改成mysql链接的话会报错找不到 jango.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb' 我这里环境已经全部抛弃掉了python2, 该用 python3的mysql-pymysql的话 要在 init中添加如下代码  import pymysql2 pymysql

分析演示: RIP动态路由协议引发的HSRP收敛问题

分析演示: RIP动态路由协议引发的HSRP收敛问题 演示目标: 1 动态路由协议在某种程度上可以帮助HSRP收敛无跟踪的盲点 2 动态路由协议RIP可能引发HSRP收敛的问题 3 为什么同一子网的主机,有些收敛快,有些慢? 演示环境:如图1所示的环境 背景说明:从实践的角度来讲,在需要部署HSRP进行三层冗余的环境中,通常物理链路也是成环的,那么这种环境中,进行网络设计时需要特别注意动态路由协议的选择,以及评估和预测可能引发的各种收敛问题,明确到底是HSRP在为用户网络在实现冗余,还是三层的动

LayUI分页,LayUI动态分页,LayUI laypage分页,LayUI laypage刷新当前页

LayUI分页,LayUI动态分页,LayUI laypage分页,LayUI laypage刷新当前页 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年8月1日 http://www.cnblogs.com/fanshuyao/ 效果图: 一.引用js依赖

YAHOO.widget.DataTable 动态分页。

Server:服务器端的代码输出数据格式如下: {"total":"392","rows":[{"areaid":"1","areaname":"北京","parentid":"0","arrparentid":"0","child":"0",&qu

jquery动态分页

最近一直研究jquery的分页效果,刚刚弄好了一个,拿出来与大家分享.分页效果与时光网的差不多. 网址:http://www.mtime.com/movie/news/all/ 先在aspx页面放置一个<div class="pageDivs"></div> ,这个是用来存放分页的. 然后建一个page.js文件,具体代码如下(js中用到的css类是自己设置的,这里就不给出了,具体的大家可以自己设置一下css样式): $(document).ready(func

Python3+django+nginx+uwsgi使用场景部署

1 环境介绍和准备Python3+django+nginx+uwsgi使用场景部署 当我们写完一套完整的网站功能,我们需要实时在生产环境上线,并需要容纳高并发的访问请求.所以我们需要部署以上来保证网站的服务质量. 1.1基本环境准备:echo 'LANG="en_GB.utf8"' > /etc/sysconfig/i18nLANG="en_GB.utf8" 1.2依赖环境:(env) [[email protected] nginx]# python -VP

django orm 分页(paginator)取数据出现警告manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: &lt;class &#39;sign.models.Guest&#39;&gt; QuerySet.

使用django的orm做分页(Paginator)时出现了下面的警告 In [19]: p=Paginator(guest_list,2) manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'sign.models.Guest'> QuerySet. #!/usr/bin/env python 网上搜的