django分页理解问题

时间:2013-04-27 13:58:34

标签: python django pagination logic

我试图理解Django分页逻辑的原理。

我的理解问题是:
我有一个包含40个项目的搜索结果页面。我想使用pagifier,每页只显示10个项目 现在让我们说,有人在我的搜索中搜索了“汽车宝马”。然后他登上了第一页,有10辆车。

我的问题是,“汽车宝马”的查询是否会被保留在请​​求中? 我不太确定正在分页的视图。

我是否必须有2个视图功能:

  1. 普通搜索
  2. 因为分页而重新搜索?
  3. 有人可以帮我理解这个逻辑吗?我阅读了文档,但没有在那里提及,或者我太愚蠢了解它。

2 个答案:

答案 0 :(得分:3)

通常,搜索请求将是:

example.com/search/?q=car+bmw

分页将使用查询(通过car + bmw过滤对象)然后应用限制。对于第一页,它将是(0,10) 当有人点击第二页时,请求将是:

example.com/search/?q=car+bmw&page=2

分页将使用相同的查询,但使用另一个偏移:(10,20)

您只需要为分页提供所需的查询,分页将完成剩下的工作。

django example,您需要修改contact_list查询。

答案 1 :(得分:1)

分页仅涉及查询集,只需获取您的查询集并将其切片以返回您在特定页面上所期望的条目数。例如:在您的情况下,只有10个条目适用于特定页面。

它不会对您的请求进行任何修改。

您可以使用单一视图处理它。

示例:

def get_cars(self, request, page=1):
    cars_per_page = 10
    search_term = request.REQUEST.get('car_type')  #car_type 'car bmw' will still be kept in request
    all_cars = Car.objects.filter(car_type__contains=search_term)
    paginator = Paginator(all_cars, cars_per_page)
    page_ = paginator.page(page)
    result_cars = page_.object_list
    return render(request, "search_cars.html", {'search_term': search_term})

如果您希望page也可以在请求中使用,那么您可以执行以下操作:

def get_cars(self, request):
    page = request.GET.get('page')
    ...
    #Everything else described above.
    ...