加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django:第一页上的分页不同

发布时间:2020-12-20 11:11:12 所属栏目:Python 来源:网络整理
导读:在那一刻,我正在使用Django的object_list来处理分页.如果您在听到我的问题后认为我需要它,我很高兴转到正确的Paginator()课程: 在主页上,我希望分页7,但在所有其他页面上我想分页10. 我该怎么做呢?我真的无法理解它.最接近我必须使其工作导致整页结果被遗
在那一刻,我正在使用Django的object_list来处理分页.如果您在听到我的问题后认为我需要它,我很高兴转到正确的Paginator()课程:

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

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

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

解决方法

只需从 django.core.paginator导入Paginator并在主页视图中将p = Paginator(thestuff,7)作为paginator对象,p = Paginator(thestuff,10).然后在任何一种情况下,在用于渲染模板的上下文中绑定p.在任何一种情况下都会适当地设置p.object_list(你似乎说这是你正在使用的方法,对吧?即,你的意思是“Django的object_list”?).

Django docs有很好的细节和例子(假设你的版本是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)短.因此,您将使用标称长度为10但deltafirst为3的单个分页器,使第一页3比其他所有短.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读