| | 1 | """ |
| | 2 | 20. Object Pagination |
| | 3 | |
| | 4 | Django provides a framework for paginating a list of objects in a few. |
| | 5 | This is often useful for dividing search results or long lists of objects |
| | 6 | in to easily readable pages. |
| | 7 | |
| | 8 | |
| | 9 | """ |
| | 10 | from django.db import models |
| | 11 | |
| | 12 | class Article(models.Model): |
| | 13 | headline = models.CharField(maxlength=100, default='Default headline') |
| | 14 | pub_date = models.DateTimeField() |
| | 15 | |
| | 16 | def __repr__(self): |
| | 17 | return self.headline |
| | 18 | |
| | 19 | API_TESTS = """ |
| | 20 | # prepare a list of objects for pagination |
| | 21 | >>> from datetime import datetime |
| | 22 | >>> for x in range(1, 10): |
| | 23 | ... a = Article(headline='Article %s' % x, pub_date=datetime(2005, 7, 29)) |
| | 24 | ... a.save() |
| | 25 | |
| | 26 | # create a basic paginator, 5 articles per page |
| | 27 | >>> from django.core.paginator import ObjectPaginator, InvalidPage |
| | 28 | >>> paginator = ObjectPaginator(Article.objects.all(), 5) |
| | 29 | |
| | 30 | # the paginator knows how many hits and pages it contains |
| | 31 | >>> paginator.hits |
| | 32 | 9 |
| | 33 | |
| | 34 | >>> paginator.pages |
| | 35 | 2 |
| | 36 | |
| | 37 | # get the first page (zero-based) |
| | 38 | >>> paginator.get_page(0) |
| | 39 | [Article 1, Article 2, Article 3, Article 4, Article 5] |
| | 40 | |
| | 41 | # get the second page |
| | 42 | >>> paginator.get_page(1) |
| | 43 | [Article 6, Article 7, Article 8, Article 9] |
| | 44 | |
| | 45 | # does the first page have a next or previous page? |
| | 46 | >>> paginator.has_next_page(0) |
| | 47 | True |
| | 48 | |
| | 49 | >>> paginator.has_previous_page(0) |
| | 50 | False |
| | 51 | |
| | 52 | # check the second page |
| | 53 | >>> paginator.has_next_page(1) |
| | 54 | False |
| | 55 | |
| | 56 | >>> paginator.has_previous_page(1) |
| | 57 | True |
| | 58 | |
| | 59 | """ |