| 121 | | |
|---|
| 122 | | class ObjectPaginator(Paginator): |
|---|
| 123 | | """ |
|---|
| 124 | | Legacy ObjectPaginator class, for backwards compatibility. |
|---|
| 125 | | |
|---|
| 126 | | Note that each method on this class that takes page_number expects a |
|---|
| 127 | | zero-based page number, whereas the new API (Paginator/Page) uses one-based |
|---|
| 128 | | page numbers. |
|---|
| 129 | | """ |
|---|
| 130 | | def __init__(self, query_set, num_per_page, orphans=0): |
|---|
| 131 | | Paginator.__init__(self, query_set, num_per_page, orphans) |
|---|
| 132 | | import warnings |
|---|
| 133 | | warnings.warn("The ObjectPaginator is deprecated. Use django.core.paginator.Paginator instead.", DeprecationWarning) |
|---|
| 134 | | |
|---|
| 135 | | # Keep these attributes around for backwards compatibility. |
|---|
| 136 | | self.query_set = query_set |
|---|
| 137 | | self.num_per_page = num_per_page |
|---|
| 138 | | self._hits = self._pages = None |
|---|
| 139 | | |
|---|
| 140 | | def validate_page_number(self, page_number): |
|---|
| 141 | | try: |
|---|
| 142 | | page_number = int(page_number) + 1 |
|---|
| 143 | | except ValueError: |
|---|
| 144 | | raise PageNotAnInteger |
|---|
| 145 | | return self.validate_number(page_number) |
|---|
| 146 | | |
|---|
| 147 | | def get_page(self, page_number): |
|---|
| 148 | | try: |
|---|
| 149 | | page_number = int(page_number) + 1 |
|---|
| 150 | | except ValueError: |
|---|
| 151 | | raise PageNotAnInteger |
|---|
| 152 | | return self.page(page_number).object_list |
|---|
| 153 | | |
|---|
| 154 | | def has_next_page(self, page_number): |
|---|
| 155 | | return page_number < self.pages - 1 |
|---|
| 156 | | |
|---|
| 157 | | def has_previous_page(self, page_number): |
|---|
| 158 | | return page_number > 0 |
|---|
| 159 | | |
|---|
| 160 | | def first_on_page(self, page_number): |
|---|
| 161 | | """ |
|---|
| 162 | | Returns the 1-based index of the first object on the given page, |
|---|
| 163 | | relative to total objects found (hits). |
|---|
| 164 | | """ |
|---|
| 165 | | page_number = self.validate_page_number(page_number) |
|---|
| 166 | | return (self.num_per_page * (page_number - 1)) + 1 |
|---|
| 167 | | |
|---|
| 168 | | def last_on_page(self, page_number): |
|---|
| 169 | | """ |
|---|
| 170 | | Returns the 1-based index of the last object on the given page, |
|---|
| 171 | | relative to total objects found (hits). |
|---|
| 172 | | """ |
|---|
| 173 | | page_number = self.validate_page_number(page_number) |
|---|
| 174 | | if page_number == self.num_pages: |
|---|
| 175 | | return self.count |
|---|
| 176 | | return page_number * self.num_per_page |
|---|
| 177 | | |
|---|
| 178 | | # The old API called it "hits" instead of "count". |
|---|
| 179 | | hits = Paginator.count |
|---|
| 180 | | |
|---|
| 181 | | # The old API called it "pages" instead of "num_pages". |
|---|
| 182 | | pages = Paginator.num_pages |
|---|