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

Django分类页pagination分页帖子重复问题修复

Django分类页分页帖子重复问题修复

问题根因

两个问题共同导致故障:

  • 模板层循环对象错误:视图虽然生成了分页后的page_obj,但同时传递了未分页的全量分类帖子查询集,模板遍历全量数据渲染,分页参数完全没生效,翻页时始终加载全量帖子,看起来和上一页内容重复
  • 排序规则不稳定:如果仅按post_date或者id之外的非唯一字段排序,当存在多条字段值相同的记录时,数据库返回的排序结果不稳定,会直接导致分页时数据重复、遗漏。

修复方案

1. 修改views.py中的CategoryView函数

调整排序规则增加唯一主键兜底,去掉多余的全量数据传递,修正后代码:

def CategoryView(request, cats):
    category_name = cats.replace('-', ' ')
    # 排序优先按发布时间倒序,同发布时间按帖子id倒序,保证排序结果绝对稳定
    post_list = Post.objects.filter(category=category_name).order_by('-post_date', '-id')
    paginator = Paginator(post_list, 3)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    return render(request, 'categories.html', {
        'cats': category_name.title(),
        'page_obj': page_obj
    })

可选优化:HomeView的ordering配置也建议改成ordering = ['-post_date', '-id'],避免首页分页遇到同时间发布的帖子时出现同样的重复问题。

2. 修改categories.html模板的循环逻辑

找到模板中遍历帖子的代码行:

{% for post in cat_menu_list %}

替换为遍历分页后的当前页对象:

{% for post in page_obj %}

修复效果

  • 每页固定展示3篇对应分类下的帖子
  • 翻页时正确加载对应页码的内容,不会出现跨页重复
  • 排序规则稳定,即使存在同一秒发布的多篇帖子,也不会出现随机丢数据、重复展示的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:51:23