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写的智能一些,可以精准的获取数据。
python3 django动态分页引发的list切片下标越界问题的更多相关文章
- Tornado-基于正则的路由和动态分页
概览 这一小节涉及了三部分内容: 1.动态分页设计 2.基本的路由系统以及基于正则的路由 3.模块引擎的继承和导入 4.web项目文件夹和ReuquestHandler的分类 5.跨站脚本攻击 文件结 ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- django之分页,纯python代码
Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...
- django 动态更新属性值
django 动态更新属性值 class TestTime(models.Model): """ 功能说明:指定测试的每一关总用时 """ ...
- DedeCMS织梦动态分页类,datalist标签使用实例
<?php require_once(dirname(__FILE__)."/include/common.inc.php");//载入基础文件 require_once(D ...
- Java 动态分页类
动态分页类: Cls_page.java package pagination; public class Cls_page { private int nums;// 总条目数 private i ...
- LayUI分页,LayUI动态分页,LayUI laypage分页,LayUI laypage刷新当前页
LayUI分页,LayUI动态分页,LayUI laypage分页,LayUI laypage刷新当前页 >>>>>>>>>>>> ...
- 第二十一章 Django的分页与cookie
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
随机推荐
- BZOJ 1303: [CQOI2009]中位数图 问题转化_扫描_思维
将比 b 大的设成 1,比 b 小的设成 -1,开个桶左右扫描一下,乘法原理乘一乘就好了. 虽然一眼切,不过这个基于中位数的转化还是相当重要的.middle 那个主席树的题也需要该做法 Code: # ...
- Noip2011 Mayan游戏 搜索 + 模拟 + 剪枝
写了一下午,终于AC了. 由于n<=5, 所以不需要太多的剪枝和技巧也能过.可以将操作后的消方块和下落和剪枝函数写到一个结构体中,这样会减少调试难度,更加简洁. 可以采用如下剪枝: 1. 如果当 ...
- springboot使用aop做日志
一.引入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- 【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建
/* * @Author: 我爱科技论坛 * @Time: 20180715 * @Desc: 实现一个类似于JQuery功能的框架 * V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架. ...
- parted分区流程操作
parted不同于fdisk(<2T)它比fdiskf更加灵活,fdisk需保持后才能生效,而parted是分区后直接生效! 磁盘分区步骤: 1.parted /dev/sdb #进入磁盘分区 ...
- python第一周:python初识、流程控制
编译性语言:在将源代码编译完毕生成一个可执行文件后才能运行 解释性语言:在代码的运行期间进行编译 动态类型语言:在运行期间才去做数据检查的语言,也就是说在使用动态类型语言时不用指定数据类型 静态类型语 ...
- python简单post信息
最近学了点关于python的网络爬虫的知识,简单记录一下,这里主要用到了requests库和BeautifulSoup库 Requests is an elegant and simple HTTP ...
- [SQL]选取随机行
在sql server中语句如下: select top 10 * from recordTable order by NEWID();
- POJ 2184
简单的01背包,把S看体积,把F看价值,把它们变正数处理就可以了.在处理负数时,因为减一个负数相当于加一个,所以要从前往后. #include <iostream> #include &l ...
- c++ 设计模式之简单的工厂模式
调试环境:vs2010 // test0.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...