0

我正在尝试了解 Django 分页逻辑的原理。

我的理解问题是:
我有一个搜索结果页面,里面有 40 个项目。我想使用分页器,每页只显示 10 个项目。
现在假设有人在我的搜索中搜索了“汽车宝马”。然后他以 10 辆车登陆到首页。

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

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

  1. 普通搜索
  2. 因为分页而重新搜索?

有人可以帮我理解这个逻辑吗?我阅读了文档,但那里没有提到,或者我太笨了,无法理解。

4

2 回答 2

3

通常,搜索请求将是:

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

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

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

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

您只需向分页提供所需的查询,分页将完成其余工作。

django 示例中,您需要修改contact_list查询。

于 2013-04-27T14:12:41.783 回答
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.
    ...
于 2013-04-27T14:12:15.953 回答