写了个分页类代替 django的分页类 采用推进法无需count总数
| |
Posted in 随笔 on 2009/05/14 / 引用(0)
其优势就是无需 count 以下总记录数

直接采用推进形式在百万记录及高负载有一定作用
但是只能上下推进 没更多页选择

paginator.py
class InvalidPage(Exception):
   pass

class PageNotAnInteger(InvalidPage):
   pass

class EmptyPage(InvalidPage):
   pass
class Paginator(object):
   def __init__(self,object_list,per_page):
       self.object_list = object_list
       self.per_page = per_page
   def page(self,number=1):
       self.cur_pages = number
       if self.cur_pages < 1 :
           number = 1
       number = (int(number)-1)*int(self.per_page)
       max = int(number)+int(self.per_page)+1
       data = self.object_list[number:max]
       num = data.__len__()
       data = data._result_cache
       # if next
       if num > int(self.per_page):
           data = data[0:-1]
           nextpage = abs((int(number)+int(self.per_page))/int(self.per_page))+1
       else:
           nextpage = None
       # if prev
       if int(number) > 0:
           if int(number) < int(self.per_page):
               prevpage = 0
           else:
               prevpage = abs(int(int(number)-int(self.per_page))/int(self.per_page))+1
       else:
           prevpage = None
       return Page(data,nextpage,prevpage,self)
   def _get_num_pages(self):
       return self.cur_pages
   num_pages = property(_get_num_pages)
   def _get_num_per_page(self):
       return self.per_page
   per_pages = property(_get_num_per_page)
class Page(object):
   def __init__(self,object_list,next_page,prev_page,paginator):
       self.object_list = object_list
       self.next_number = next_page
       self.previous_number = prev_page
       self.paginator = paginator
   def has_next(self):
       if self.next_number is None:
           return False
       else:
           return True
   def has_previous(self):
       if self.previous_number is None:
           return False
       else:
           return True
   def next_page_number(self):
       return self.next_number

   def previous_page_number(self):
       return self.previous_number
This entry comes from 本站原创 and has been read for 624 times.It is tagged with , , .
0 Responses
发表评论

昵称

网址

电邮

OpenID登入 高级选项 表情