Создание функции для вызова api для пагинации вызывает дублирующее значение int

Я создаю простое приложение на react и django, в котором я обращаюсь к API и делаю пагинацию в бэкенде.

Проблема в том, что я хочу сделать два вызова на каждом клике страницы, например - Если пользователь кликнул на страницу 1, то я пытаюсь сделать api вызов со страницами &page=1 и &page=2. А если пользователь кликнул на страницу 2, то сделать api вызов &page=3 и &page=4, а если пользователь кликнул на страницу 3, то сделать api вызов &page=5 и &page=6

Но проблема в том, что когда пользователь находится на странице 1st, то он делает вызовы api (страница 1 и 2) полностью, но когда пользователь переходит на страницу 2, то он вызывает api с &page=2 и &page=3 вместо &page=3 и &page=4.

Я хочу вызвать api для следующих двух страниц.

views.py

class MakeApiCall(APIView):

    def get(self, *args, **kwargs):
        current_page = self.request.query_params.get('current_page')
        current_page = int(current_page)

        for index in range(2):
            url = "https://api.punkapi.com/v2/beers?page=" + str(current_page)
            call_api = requests.get(url)
            print(call_api.url)
            current_page += 1

Когда я запускаю вышеуказанную функцию с current_page = 1, она вызывает api с page=1 и page=2, но когда я вызываю current_page = 2, она снова вызывает page=2 и page=3, а не page=3 и page=4

Я создал цикл while только для этого, но он работает так же, как эта функция диапазона.

Каждая страница возвращает 25 results, поэтому я остановлю цикл, когда в массиве будет 50 элементов, но он все еще работает, как и приведенная ниже функция

    results = []

    while len(results) != 50:
        url = "https://api.punkapi.com/v2/beers?page=" + str(current_page)
        call_api = requests.get(url)
        for result in api_results.json():
            if len(results) < 50:
                results.append(result)
            else:
                break

Но он по-прежнему вызывает api тем же способом, что и раньше.

Мне понравился метод while, Он был бы лучшим, но не работает.

Frontend в порядке, но если он вам нужен, пожалуйста, дайте мне знать

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

Для определения начального индекса цикла можно воспользоваться простой формулой: current_page * 2 - 1 (вы можете вручную проверить, что это работает для случаев, когда current_page равен 1, 2, 3 и т.д.). Это означает, что цикл в views.py должен выглядеть следующим образом:

...

for i in range(2):
    start_index = current_page * 2 - 1
    url = "https://api.punkapi.com/v2/beers?page=" + str(start_index + i)
    call_api = requests.get(url)
    print(call_api.url)

Вы должны рассчитать

index1 = (current_page * 2) - 1
index2 = (current_page * 2)

Для current_page = 1 это дает 1, 2

Для current_page = 2 это дает 3, 4

Для current_page = 3 это дает 5, 6

etc.

Вернуться на верх