Создание функции для вызова 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.