Django:第一页上的分页不同

use*_*170 3 django pagination

在那一刻,我正在使用Django的object_list来处理分页.如果您在听到我的问题后认为我需要它,我很高兴转到正确的Paginator()课程:

在主页上,我希望分页7,但在所有其他页面上我想分页10.

我该怎么做呢?我真的无法理解它.最接近我必须使其工作导致整页结果被遗漏,所以显然我不希望这样.

我非常感谢任何答案.如果您需要更多信息,请与我们联系.非常感谢.

Ale*_*lli 7

只需在主页的视图中from django.core.paginator import Paginator创建一个paginator对象p = Paginator(thestuff, 7),p = Paginator(thestuff, 10)在其他任何地方.然后在任何一种情况下绑定p您用于渲染模板的上下文.p.object_list在任何一种情况下都会适当地设置(你似乎说这是你正在使用的方法,对吧?就是你的意思是"Django的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)
Run Code Online (Sandbox Code Playgroud)

现在使用MyPaginator完全如上面的文本和示例显示Django自己的用法,除了在创建它时,使用额外的命名参数deltafirst=3使第一页3比正常的每页长度(10)短.因此,您将使用标称长度为10但deltafirst为3的单个分页器,使第一页3比其他所有短.

(可能存在问题,validate_number但我不确定它们是否出现 - 如果它们出现,那么MyPaginator也需要覆盖该方法).