2013-04-27 4 views
0

Я пытаюсь понять принципы логики разбиения на страницы Django.django pagination understanding issue

Моя проблема с пониманием:
У меня есть страница с результатами поиска с 40 элементами внутри. Я хочу использовать pagifier и показывать только 10 элементов на странице.
Теперь предположим, что кто-то искал «автомобиль BMW» в моем поиске. затем он приземляется на первую страницу с 10 автомобилями.

Мой вопрос: будет ли запрос «автомобиль BMW» сохранен в запросе?
Я не совсем уверен в просмотре, который просматривает страницы.

Должен ли я иметь 2 вид функции:

  1. нормальный поиск
  2. повторного поиска из-за страничной?

Может кто-то, пожалуйста, помогите мне понять эту логику? Я читал документы, но там не упоминается, или я слишком глуп, чтобы понять это.

ответ

1

Pagination относится только к запросу и просто берет ваш запрос и разрезает его, чтобы вернуть количество записей, которые вы ожидаете на определенной странице. например: В вашем случае только 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

+0

извините, не уверен, что вы имеете в виду. вы можете немного разобраться. –

+0

вы сделали это: '' def get_cars (self, request, page = 1) ''. но вы должны получить '' страницу'' из '' GET'' запроса. – doniyor

3

Обычно поисковый запрос будет:

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

Pagination будет использовать запрос (для фильтрации объектов на автомобиле + bmw), а затем применить ограничение. Для первой страницы будет (0, 10) Когда кто-то нажмет на второй странице, то запрос будет:

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

Pagination будет использовать один и тот же запрос, но с другим смещение: (10, 20)

Вам просто нужно предоставить нужный запрос для разбивки на страницы, а разбиение на страницы будет выполнять остальную часть работы.

От django example, вам необходимо изменить запрос contact_list.