Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>i wrote this class today :)</p> <pre><code>class gaePaginator (): leftPages = 3 rightPages = 3 centerPages = 1 totalPages = 1 baseURL = 'http://example.com/%s/' moveLeft = '&amp;lt;' moveLeftmax = '&amp;lt;&amp;lt;' moveRight = '&amp;gt;' moveRightmax = '&amp;gt;&amp;gt;' href = '&lt;a href="%s"&gt;%s&lt;/a&gt;' currentPageWrap = '&lt;b&gt;%s&lt;/b&gt;' textBetween = '...' separator = ' ' currentPage = 1 """ Ranges for current page """ def leftRange(self): return range(1, self.leftPages+1) def rightRange(self): return range (self.totalPages - self.rightPages+1, self.totalPages + 1) def centerRange(self): return range(self.currentPage - self.centerPages, self.currentPage + self.centerPages + 1) def renderLeftNav(self): """ Method render left page nav tab like &lt;&lt;(move to first page) &lt;(move to previous page). """ result = [] if self.currentPage &lt;= 1 or self.currentPage &gt; self.totalPages: # draw nothing pass elif self.currentPage == 2: #draw only arrow for previous page arrow = self.href % (self.baseURL % 1, self.moveLeft) result.append(arrow) else: #draw arrow for previous page and first page arrow = self.href % (self.baseURL % 1, self.moveLeftmax) result.append(arrow) arrow = self.href % (self.baseURL % (self.currentPage - 1), self.moveLeft) result.append(arrow) return self.separator.join(result) def renderRightNav(self): """ Method render left page nav tab like "&lt;&lt;(move to first page) &lt;(move to previous page)" """ result = [] if self.currentPage &gt;= self.totalPages or self.currentPage &lt; 1: #draw nothing pass elif self.currentPage == self.totalPages - 1: #draw only arrow for next page arrow = self.href % (self.baseURL % self.totalPages, self.moveRight) result.append(arrow) else: #draw arrow for next page and for last page arrow = self.href % (self.baseURL % (self.currentPage + 1), self.moveRight) result.append(arrow) arrow = self.href % (self.baseURL % self.totalPages, self.moveRightmax) result.append(arrow) return self.separator.join(result) def getRange (self): result = [] for i in range(1, self.totalPages+1): if i in self.leftRange() or i in self.rightRange() or i in self.centerRange(): result.append(i) else: if result[-1] is not None: result.append(None) return result def renderPageRange (self): ''' Method returns list of pages as urls in HTML representation. ''' result = [] for i in self.getRange(): if i == self.currentPage: tmp = self.currentPageWrap % i else: if i is None: tmp = self.textBetween else: tmp = self.href % (self.baseURL % i, i) result.append(tmp) return self.separator.join(result) def asURL(self): ''' Method returns list of pages as urls in HTML representation with border arrows. ''' result = [] result.append(self.renderLeftNav()) result.append(self.renderPageRange()) result.append(self.renderRightNav()) return self.separator.join(result) </code></pre> <p>Using in views.py:</p> <blockquote> <pre><code>from ....main.paginator import gaePaginator </code></pre> </blockquote> <pre><code>pages = gaePaginator () pages.currentPage = pagesNumber pages.leftPages = 2 pages.rightPages = 2 pages.centerPages = 1 pages.totalPages = totalPagesNumber pages.baseURL = 'page/%s' pages.separator = '&amp;nbsp;&amp;nbsp;' result = {'pages' : pages.asURL(),} </code></pre> <p>using in template:</p> <pre><code>{{ pages }} </code></pre> <p>as result you`ll recieve: for ten pages,</p> <p>current page is 1 : <strong>1</strong> 2 ... 9 10 > >></p> <p>current page is 4 : &lt;&lt; &lt; 1 2 3 <strong>4</strong> 5 ... 9 10 > >></p> <p>current page is 6 : &lt;&lt; &lt; 1 2 ... 5 <strong>6</strong> 7 ... 9 10 > >></p> <p>current page is 10: &lt;&lt; &lt; 1 2 ... 9 <strong>10</strong></p> <pre><code>&lt;&lt; - moves to first page &lt; - moves to previous page &gt; - moves to next page &gt;&gt; - move to last page </code></pre> <p>also, this code tries to draw pages for any case: for example, if user will set page number = -1 or 100000 "1 2 ... 9 10" will be rendered.</p> <p>also it can be used in template like django Paginator, but i did not tried to do it.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload