gpt4 book ai didi

django - 使用 ListView 显示分页结果的最后一页而不是 404

转载 作者:行者123 更新时间:2023-12-04 01:50:04 24 4
gpt4 key购买 nike

Django docs展示如何使用基于函数的 View 通过捕获 EmptyPage 异常返回分页查询集的最后一页。

使用基于类的通用 View (例如 ListView)实现相同目的的最简单方法是什么?

我首先想到的是 allow_empty MultipleObjectMixin 的设置可以满足我的需要,但检查代码表明,如果查询集中有零个对象,而不是请求的页面上有零个对象,它只会防止 404 错误。

两个选项似乎是:

  1. 子类 ListView 并覆盖 paginate_queryset(继承自 MultipleObjectMixin),或者
  2. 子类 Paginator 并覆盖 validate_number,并将 paginator_class 设置为 View 中的子类。

有没有更好的方法来实现这一点?

最佳答案

这是选项 2 的样子:

from django.core.paginator import EmptyPage, Paginator
from django.views.generic import ListView

class SafePaginator(Paginator):
def validate_number(self, number):
try:
return super(SafePaginator, self).validate_number(number)
except EmptyPage:
if number > 1:
return self.num_pages
else:
raise

class MyView(ListView):
paginator_class = SafePaginator
paginate_by = 25

[...]

这对我来说似乎是最好的选择。

关于django - 使用 ListView 显示分页结果的最后一页而不是 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com