Проблема с пагинацией результатов из стороннего API в Django

Я делаю проект портфолио, в котором я использую API Google Books API для поиска книг и класс Django Paginator для постраничной выдачи результатов. Я смог получить результаты поиска, используя CBV FormView и GET запрос, но не могу понять, как заставить работать пагинацию для ответа API.

Решением, которое я могу придумать, является добавление &page=1 к url первого поиска, а затем получение этого параметра при каждом GET-запросе и использование его для пагинации. Проблема в том, что я не могу понять, как добавить этот параметр в первый поиск, и я не знаю, как увеличить значение этого параметра при нажатии на кнопки пагинации

Вот что у меня есть сейчас:

Форма:

class SearchForm(forms.Form):
    search = forms.CharField(label='Search:', max_length=150)

Вид:

class HomeView(FormView):
    template_name = "home.html"
    form_class = SearchForm
    pageIndex = 0

    def get(self, request, *args, **kwargs):
        # get submitted results in view and display them on results page. This will be swapped out for an AJAX call eventually
        if "search" in request.GET:
            # getting search from URL params
            search = request.GET["search"]
            kwargs["search"] = search
            context = super().get_context_data(**kwargs)
            # Rest API request
            response = requests.get(
                f'https://www.googleapis.com/books/v1/volumes?q={search}&startIndex={self.pageIndex}&key={env("BOOKS_API_KEY")}'
            )
            response = response.json()
            items = response.get("items")
            # pagination...needs work
            paginator = Paginator(items, 2)
            page_obj = paginator.get_page(1)
            context["results"] = page_obj
            return self.render_to_response(context)
        else:
            return self.render_to_response(self.get_context_data())

Шаблон:

{% extends "base.html" %}

{% block content %}
<form action="/">
    {{ form }}
    <input type="submit" value="Submit">
</form>
<h1>Books</h1>
<ul>
{% for result in results %}
    <li>{{ result.volumeInfo.title }} : {{result.volumeInfo.authors.0}}</li>
{% empty %}
    <li>Search to see results</li>
{% endfor %}
</ul>

{% if results %}
    <div class="pagination">
        <span class="step-links">
                {% if results.has_previous %}
                        <a href="?page=1">&laquo; first</a>
                        <a href="?page={{ results.previous_page_number }}">previous</a>
                {% endif %}

                <span class="current">
                        Page {{ results.number }} of {{ results.paginator.num_pages }}
                </span>

                {% if results.has_next %}
                        <a href="?page={{ results.next_page_number }}">next</a>
                        <a href="?page={{ results.paginator.num_pages }}">last &raquo;</a>
                {% endif %}
        </span>
    </div>
{% endif %}
{% endblock content %}

Я также рассматривал Django REST Framework для этого, но ответ API Google Books не содержит никакой информации о следующей странице, предыдущей странице и т.д. Я уже делал подобную пагинацию в React, и это не сложно, мне просто трудно приспособить мою ментальную модель того, как это сделать, к Django. Если кто-нибудь может дать совет, как заставить это работать, я буду очень благодарен.

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