2013-04-27 55 views
0

我想了解Django分页逻辑的原理。django分页理解问题

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

我的问题是,询问“宝马宝马”是否会被要求保存?
我不太清楚分页的视图。

我必须有2个视图功能:

  1. 正常的搜索
  2. 重新搜索,因为分页的?

有人能帮我理解这个逻辑吗?我阅读了文档,但没有在那里提到,或者我太愚蠢,无法理解它。

回答

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. 
    ... 
+0

谢谢,但你的页面静态设置为1,不是吗? – doniyor 2013-04-27 14:17:00

+0

抱歉,不确定你的意思。你能否详细说明一下。 – 2013-04-27 14:18:24

+0

你这样做:''def get_cars(self,request,page = 1)''。但你应该从''GET''请求获得''page''。 – doniyor 2013-04-27 14:23:46

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查询。