__author__ = 'Vance Dubbelry : altjeringa@gmail.com' __version__ = '0.1' __date__ = '3/02/07' from django.template import Context, loader from django.conf import settings import math class Page(object): """ Bean Style Class. Just holds values """ def __init__(self, num, offset, current ): self.number = num self.offset = offset self.current = current class Pager(object): def end(self): return self.current_index + self.page_length def render(self): """ Returns a string of all the html for the pager. """ t = loader.get_template('util/pager.html') c = Context( { 'pages': self.pages(), 'URL_PREFIX' : settings.URL_PREFIX, 'query_string': self.query_string, 'current_index': self.current_index, 'next' : self.gen_next(), 'previous' : self.gen_previous(), 'records': self.set_length } ) return t.render(c) def pages(self): page_nums = range(1, self.number_of_pages() ) pages = [] for num in page_nums: current = False; if ( num == self.current_page() ): current = True pages.append( Page(num, (num * self.page_length) - self.page_length, current) ) return pages def number_of_pages(self): pages = self.set_length / self.page_length + 2 return pages def current_page(self): return math.ceil( ( float( self.current_index ) / float( self.page_length ) + 2 ) ) def gen_next(self): next = self.next if self.number_of_pages() != self.current_page(): next = self.current_index + self.page_length return next def gen_previous(self): prev = self.previous if self.current_index != 0: prev = self.current_index - self.page_length return prev def __init__(self): self.page_length = settings.PAGE_LENGTH self.next = 0 self.previous = 0 self.current_index = 0 self.set_length = 0 self.query_string = ''