You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加分页后Django的filter过滤功能为什么无法正常工作?

问题原因及修复方案

1. 核心问题(导致所有页显示全量数据)

模板中遍历的是未分页的全量数据gem_list,而非分页后的page_obj对象。

2. 各文件修复步骤

views.py 修复

  • 删除错误的queryset转list再过滤的逻辑,Python列表不存在filter方法,你注释掉的原过滤逻辑是正确的
  • 去掉冗余的重复赋值和异常捕获逻辑,Paginator.get_page()原生支持处理页码非法、页码超出范围的场景,无需额外捕获异常
    修复后代码如下:
def gem_list(request):
    # 直接用queryset过滤,无需转list,Paginator原生支持queryset
    gem_list = Rhyme.objects.filter(is_gem=True)
    paginator = Paginator(gem_list, 5)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    page_range = paginator.get_elided_page_range(number=page_obj.number) 

    context = {
        'page_obj': page_obj,
        'paginator' : paginator,
        'page_range' : page_range,
    }
    return render(request, 'rhymes/gem_list.html', context)

模板文件修复

把遍历全量数据的逻辑,改为遍历分页后的page_obj:
原来的代码:

{% for gem in gem_list %}

修改为:

{% for gem in page_obj %}

models.py 可选修复(不影响分页,但属于代码错误)

  • 删除重复定义的get_absolute_url方法,保留一个即可
  • 修正num_rhymes属性的语法错误:Rhyme.objects.all().count() (all后面加括号)
  • 修正contributor_rhyme_count的过滤条件:Rhyme.objects.filter(contributor=self).count()

内容的提问来源于stack exchange,提问作者YCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:39:03