Просто from django.core.paginator import Paginator
и создайте объект paginator как p = Paginator(thestuff, 7)
в представлении для домашней страницы, p = Paginator(thestuff, 10)
везде. Затем в любом случае свяжите p
в контексте, который вы используете для рендеринга шаблона. p.object_list
будет установлен соответствующим образом в любом случае (и вы, похоже, говорите, что вы используете именно такой подход, верно?
Django документы имеют отличные детали и примеры (при условии, что вы на 1.0 или лучше). Если вы не можете заставить его работать, можете ли вы показать нам (упрощенную версию, которая все еще не работает) вашего шаблона и просмотреть код?
Редактировать: проблема теперь четко показана, и я думаю, что она должна быть решена путем создания подкласса основного пагинатора Django следующим образом:
from django.core.paginator import Paginator, Page
class MyPaginator(Paginator):
def __init__(self, **kw):
self.deltafirst = kw.pop('deltafirst', 0)
Paginator.__init__(self, **kw)
def page(self, number):
"Returns a Page object for the given 1-based page number."
number = self.validate_number(number)
if number == 1:
bottom = 0
top = self.per_page - self.deltafirst
else:
bottom = (number - 1) * self.per_page - self.deltafirst
top = bottom + self.per_page
if top + self.orphans >= self.count:
top = self.count
return Page(self.object_list[bottom:top], number, self)
Теперь используйте MyPaginator точно так же, как приведенный выше текст и примеры показывают использование Django, за исключением того, что при его создании используйте дополнительный именованный аргумент deltafirst=3
, чтобы сделать первую страницу на 3 короче, чем обычная длина на страницу (из 10). Таким образом, вы будете использовать одиночный paginator с номинальной длиной 10, но по меньшей мере с 3, чтобы сделать первую страницу 3 короче, чем все остальные.
(Могут быть проблемы в validate_number
, но я не уверен, что они появятся - если они появятся, MyPaginator также потребуется переопределить этот метод).