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