我试图理解Django分页逻辑的原理。
我的理解问题是:
我有一个包含40个项目的搜索结果页面。我想使用pagifier,每页只显示10个项目
现在让我们说,有人在我的搜索中搜索了“汽车宝马”。然后他登上了第一页,有10辆车。
我的问题是,“汽车宝马”的查询是否会被保留在请求中? 我不太确定正在分页的视图。
我是否必须有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.
...