django分页 所有问题处理结果...汗!搞了那么多天啊

Django组件——分页器(paginator) Django组件——分页器(paginator) 一、视图层 from django.shortcuts import render # Create your views here. from .models import Book from django.core.paginator import Paginator,Emp... 阅读详情

django分页 所有问题处理结果...汗!搞了那么多天啊

waiting未    发表于2010年07月26日 01:13  阅读(1) 评论( 0) 分类: Django 权限: 公开

 

#-*-coding:utf-8-*-

"""

Google App Engine (GAE) 分页类

Usage: 

    query = User.gql('order by lastname')

    pager = Paginator(query,url="/userlist/",pagesize=5)

    results,pager = pager.fetch(offset)

"""

class Paginato(object):

  def __init__(self,query=None,pagesize=20,url=None):

    self.query = query

    self.pagesize = pagesize

    self.url = url 

 

  def fetch(self,offset):

    results =self.query[offset:]  ##results =self.query.fetch(300,offset)

                                    本来这里是后便的代码,fetch在gae里的意思是取300个实例出来,但是要跳过0ffset个

            换到django就是把所有的取出来 然后去offset之后的所有代码

 

 

    output = self.create_links(offset,len(results))

    return (results[:self.pagesize],output)

 

  def create_links(self,offset,count):

 

    num_links = 4  ##这个是空值页面最多显示的分页数

    if count % self.pagesize ==0 :

      num_pages = count/self.pagesize -1

    else:

      num_pages = count/self.pagesize 

 

    cur_page = offset/self.pagesize + 1

    start_page = 1

    end_page = cur_page + num_links

 

    if cur_page - num_links >0:

      start_page = cur_page - num_links + 1

    if num_pages < num_links:

      end_page = cur_page + num_pages 

 

    if end_page==1:

      return ''

    links = []

 

    for i in range(start_page,end_page+1):

      links_item = {}

      links_item['index'] = i

      links_item['offset'] = (i-1) * self.pagesize

      links.append(links_item)

 

    pagelinks = {}

    pagelinks['item'] = links

    pagelinks['cur_page'] = cur_page

    if cur_page>1:

      pagelinks['prev'] = offset - self.pagesize

    else:

      pagelinks['prev'] = None

 

 

    if cur_page < end_page:

      pagelinks['next'] = offset + self.pagesize

    else:

      pagelinks['next'] = None

 

 

    output = '';

    if pagelinks['prev'] is not None:

      output += r'<a href="%s/offset/%s">上一页</a> ' % (self.url,pagelinks['prev'])

 

    for i in pagelinks['item']:

      if i['index'] != pagelinks['cur_page']:

        output += r'<a href="%s/offset/%s">%s</a> ' % (self.url,i['offset'],i['index'])

      else:

        output += r' <a href="" style="color:#009193">%s</a>  ' % (i['index'])

 

    if pagelinks['next'] is not None:

      output += r'<a href="%s/offset/%s">下一页</a> ' % (self.url,pagelinks['next'])

 

    return output

 

###    output = '';

    if pagelinks['prev'] is not None:

      output += '<a href="%s?offset=%s">上一页</a> ' % (self.url,pagelinks['prev'])

    for i in pagelinks['item']:

      if i['index'] != pagelinks['cur_page']:

        output += '<a href="%s?offset=%s">%s</a> ' % (self.url,i['offset'],i['index'])

      else:

        output += ' <a href="" style="color:#009193">%s</a>  ' % (i['index'])

    if pagelinks['next'] is not None:

      output += '<a href="%s?offset=%s">下一页</a> ' % (self.url,pagelinks['next'])

    return output

 

 

这里的<a href="%s/offset/%s">,因为在前台点击的时候总是把=转码了,变成d35,所以我用斜杠把他们出别开,然后再url.py我是这么设置

 

匹配的,(r'^sub/(/d{1,10})/offset/(/d{1,10})$', views.hours_ahead),每一个括号其实就是views里的一个参数,所以我views是这么设

 

置的,因为(r'^sub/(/d{1,10})/$', views.hours_ahead),公用一个views视图,所以我视图中有个缺省参数,

 

 

def hours_ahead(request, subcateid,d=''):

  id = int(subcateid)

  infolist=Info.objects.filter(subcategory__id__exact=id).order_by('-date') 

  u ="/sub/"+subcateid

 

  pager = Paginato(infolist,5,url=u) ##这里5是分5个

 

  page = d  ##这里本来我page=request.GET.get('offset'),这里是针对以前没改的pager.py里的url的,但是后来改了url所以参数直接传

 

到views里了 

 

  infos = {}

 

  if  page is '':

    page = '0'

 

  infos,pager = pager.fetch(int(page))

  subcategorys = Subcategory.objects.filter(id=id)

  t = get_template('infoList.html')

 

  html = t.render(Context({'infoList': infos,'subcategory':subcategorys,'pager':pager,'page':page}))

  return HttpResponse(html)

 

 

 

还有个问题 就是前台出现转码的问题 我最后用{{pager|safe}},告诉django这是不需要转码的 ,至于其他的方法我笔记里有

Django 搜索结果分页的实现 以及点击下一页搜索条件丢失可能的原因分析 1.Django 搜索结果分页的实现 在这里我们用django自带的分页模块来实现 这个paginator对象中带有如下属性: #per_page:每页显示条目数量 #count:数据总个数 #num_pages:总页数 #page_range:总页数的索引范围,如:(1,10),(1,200) #page:page对象 view.py #先导包 from django.shortcuts import render from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger #搜索和分页的实现 @csrf 立即下载

相关推荐

Django 2.1.7 分页 Paginator

参考文献 https://docs.djangoproject.com/zh-hans/2.1/topics/pagination/ 分页 Django提供了数据分页的类,这些类被定义在django/core/paginator.py中。 类Paginator用于对列进行一页n条数据的分页运算。类Page用于表示第m页的数据。 Paginator类实例对象 方法_in...

DevOps海洋的渔夫@专栏 464

django分页(Paginator)

  有的时候我们会在页面中展示大量数据,全部都放在一页可能会降低用户体验,Django提供了一个Paginator类来帮助我们管理分页数据。 起步 介绍分页器对象的一些属性和方法 1. 引入该类及相关异常模块: from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage Paginator:...

大白成长记 1万+

python测试开发django-115.Paginator分页器展示table表格数据

前言 django自带的分页器Paginator,可以实现分页 Paginator 分页器 paginator模块有3个跟分页相关的类 Paginator:分页器对象 PageNotAnInteger:页码不是一个整数时引发该异常 EmptyPage:页码不在有效范围时(即数据为空)引发该异常 导入Paginator类,可以看到一些内置属性 from django.core.paginator import Paginator class Paginator: def __init__(se

qq_27371025的博客 941

django3.1.2分页,当请求页号page_num与paginator.num_pages相等时报空页错误的处理方法

环境:win10系统,python3.9+django3.1.2,pycharm2020.1.1 错误描述: 采用django自带的paginator分页,当请求页码等于paginator.num_pages的时候,就会报错。 具体如下: 本页结果为空 Request Method: GET Request URL: http://127.0.0.1:8000/comm/comlist/ctype/2/2-2 Django Version: 3.1.2 Exception Type: EmptyPa

zhch1979的专栏 2147

2020-11-04 django分页中,请求页号等于paginator.num_pages时报空页错误

采用django的Paginator来进行分页,当请求页号等于paginator.num_pages时报空页错误,一直弄不明白什么原因,请求大家帮助。 URL配置链接为:comm/comlist/ctype/<int:类目ID>/<int:每页数量>-<int:请求页号> Views中的 函数如下: def getTypeCommList(request, distinct_class, class_id,perpage_num,page_number=None):

zhch1979的专栏 518

python_django_Pagination

分页查询 当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。 解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一“页“的数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。 打一个比方,有很人要过河,而只有一条船摆渡。若让所有人都上船,肯定会导致...

qq_40794266的博客 491

Django框架(二十二:实现分页功能的几种方式)

介绍三种实现分页功能的方式,前两种为简单的,后一种稍微复杂一些 第一种方式: 如图所示,能一次将所有页都能展示出来 视图函数: from django.core.paginator import Paginator, PageNotAnInteger, InvalidPage, EmptyPage def select(request): # 1. 把需要分页的数据全部查询出来; ...

qq_41989320的博客 3929

Django分页慢的问题解决方案

在使用Django进行分页的时候,发现数据量大了会变得很慢,有明显的延迟几百万数据延迟竟能达到1-2秒。经过一番分析,本人总结出了几个关键点,并提供了一种实测可行的解决方案。 首先介绍一下环境,本人使用的是layUI后台管理模板。分页layUI已经定,后台服务只需要按照layUI的请求,返回正确页面的数据和总数据量。前端请求url类似这样:/use/ship/data...

yinshuwei的专栏 3672

Django分页

Paginator对象 方法init(列表,int):返回分页对象,参数为列表数据,每面数据的条数 属性count:返回对象总数 属性num_pages:返回页面总数 属性page_range:返回页码列表,从1开始,例如[1, 2, 3, 4] 方法page(m):返回Page对象,表示第m页的数据,下标以1开始 Page对象

大叔很坑的博客 1337

Django 搜索后无法分页问题的解决办法

搜索与分页问题 当我在执行完搜索之后,然后到搜索结果的下一页的时候,会出现搜索的结果消失,只在地址栏中留下了 127.0.0.1:8000/search/?page=1 搜索的结果全部消失 排查问题 首先我在Django的编辑器中的运行栏中发现了以下错误 UnorderedObjectListWarning: Pagination may yield inconsistent result...

secowo的博客 1127

django 查询时间范围_Django分页查询问题

使用MySQL缓存开发环境为Django==2.1.7, djangorestframework==3.9.1, mysqlclient==1.4.2.post1 其他依赖包不赘述原因个人开发Django后端程序, 开启了SQL日志, 正巧现在在深入学习MySQL相关知识, 顺便进行了下性能测试. 不测试不知道, 一测试下一跳, 以下的是我遇到的问题和解决问题的过程. # django查询sql...

weixin_31614235的博客 380

Python3之Django Web框架分页页码处理二

视图函数: if request.method == 'GET': publisher_list = models.Publisher.objects.all() # 分页功能 paginator = Paginator(publisher_list, 5) page_num = request.GET.get('page', 1) ##############

Quincy.Coder的博客 1143

django-pagination---七步教你实现Django网站列表自动分页

from:http://django-china.cn/topic/53/ 网站,特别是论坛,就如本社区一样,肯定会遇到某个页面要显示列表(比如本社区的首页,要显示主题列表),那肯定就会涉及到列表的分页功能。 举个例子,比如一个列表有100个item,那我们网站的页面是不是将此100个item都显示出来吗?显示不是哦,这样做以后一来是页面不好看(页面太长啦),用户体验不好(

fighter_yy的专栏 1万+

Django Rest Framework - 异常 、返回值处理 与 分页实现

. 异常在使用Django Rest Framework的时候,如果发生异常的话,往往如下面所示:{"detail": "Not allowed."}但是后台往往想要的是常见的模式:{ "desc":"Not allowed.", "code":400, "data":null }官网文档 还是很清楚的,我们需要自定义 异常处理,然后配置就可以了,比如:1. 实现f

原小明 9121

django实现搜索后分页问题

由于django提供了paginator模块,直接调用就行 如:from django.core.paginator import Paginator 但是django实现搜索后分页,只会显示第一页,其他页都无法正确显示。 后知道,django的请求分页是GET模式,而且需要在a标签里传递我们的搜索内容。 代码: <nav aria-label="Page navigation"&gt...

qq_44267691的博客 1182

Django框架(十六):分页:Paginator、EmptyPage、PageNotAnInteger、自定义分页组件

提要:列表分页主要是明白:列表当前需要显示内容索引=(列表当前页数-1)*每页显示条数 至 列表当前页数*每页显示条数 一、Django的内置分页 Django内置的分页需要使用到3个类:Paginator、EmptyPage、PageNotAnInteger 1.1 Paginator介绍 paginator = Paginator(全部数据, 每页显示条数) paginato...

白骨梦儿 3894
上一篇: django的转义总结:escape,autoescape,safe,mark_safe
下一篇: django的上传文件(比较复杂的一种)
wwaiym
博客等级 码龄16年 4粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值