为什么我的 Django 分页会无限地返回相同的项目?

Why does my django pagination keeps returning the same items infinitely?

我正在使用 django 和 ajax 在我的网站上创建无限滚动。当用户滚动到页面底部时,我希望它从数据库(在下一页中)加载更多项目。除了它不断地无限返回第一页的项目外,一切都运行良好。例如,如果用户向下滚动到页面末尾而不是添加页面 2 的元素,它只是再次将第一页中的相同元素添加到底部。我很确定这个问题来自我的views.py。我似乎无法弄清楚出了什么问题。

def feed(request):
    queryset2 = Store_detail.objects.filter(store_lat__gte=lat1, store_lat__lte=lat2)\
    .filter(store_lng__gte=lng1, store_lng__lte=lng2)
queryset3 = Paginator(queryset2, 4)
    page = request.GET.get('page',1)
    try:
         queryset = queryset3.page(1)
    except PageNotAnInteger:
        queryset = queryset3.page(page)
    except EmptyPage:
        queryset = ""
    context = {
        "location":location,
        "queryset":queryset,
    }
    # return HttpResponse(template.render(context,request))
    return render(request, 'main/feed.html', {'queryset': queryset, 
'location':location,})

所以基本上我想在用户滚动到屏幕末尾时加载下一页,如果下一页中没有更多项目或下一页不存在则停止添加项目。

分页逻辑有点不对劲。您分页:

try:
    # you first try to retrieve page 1
    queryset = queryset3.<b>page(1)</b>
except PageNotAnInteger:
    queryset = queryset3.page(page)
except EmptyPage:
    queryset = ""

这意味着您首先要获取第一页,只有当 1 不是整数时,您才会使用 page querystring 参数获取页面。你应该交换这些,比如:

try:
    queryset = queryset3.<b>page(page)</b>
except PageNotAnInteger:
    queryset = queryset3.<b>page(1)</b>
except EmptyPage:
    queryset = Store_detail.objects.<b>none()</b>