我正在尝试了解 Django 分页逻辑的原理。
我的理解问题是:
我有一个搜索结果页面,里面有 40 个项目。我想使用分页器,每页只显示 10 个项目。
现在假设有人在我的搜索中搜索了“汽车宝马”。然后他以 10 辆车登陆到首页。
我的问题是,查询“汽车宝马”是否会保留在请求中?
我不太确定分页页面的视图。
我是否必须有 2 个视图功能:
- 普通搜索
- 因为分页而重新搜索?
有人可以帮我理解这个逻辑吗?我阅读了文档,但那里没有提到,或者我太笨了,无法理解。
我正在尝试了解 Django 分页逻辑的原理。
我的理解问题是:
我有一个搜索结果页面,里面有 40 个项目。我想使用分页器,每页只显示 10 个项目。
现在假设有人在我的搜索中搜索了“汽车宝马”。然后他以 10 辆车登陆到首页。
我的问题是,查询“汽车宝马”是否会保留在请求中?
我不太确定分页页面的视图。
我是否必须有 2 个视图功能:
有人可以帮我理解这个逻辑吗?我阅读了文档,但那里没有提到,或者我太笨了,无法理解。
通常,搜索请求将是:
example.com/search/?q=car+bmw
分页将使用查询(通过汽车+宝马过滤对象)然后应用限制。对于第一页,它将是 (0, 10) 当有人点击第二页时,请求将是:
example.com/search/?q=car+bmw&page=2
分页将使用相同的查询,但有另一个偏移量:(10, 20)
您只需向分页提供所需的查询,分页将完成其余工作。
从django 示例中,您需要修改contact_list
查询。
分页仅与查询集有关,只需将您的查询集和切片以返回您期望在特定页面上的条目数。例如:在您的情况下,只有 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.
...