Django пагинация с поиском не работает

MultiValueDictKeyError at /search/ 'search' Метод запроса: GET URL запроса: http://127.0.0.1:8000/search/?page=2. Версия Django: 4.1.5 Тип исключения: MultiValueDictKeyError Значение исключения:
'search' Местоположение исключения: C:\Python311\Lib\site-packages\django\utils\datastructures.py, строка 86, in getitem. Поднято во время: blogs.views.search Python Executable: C:\Python311\python.exe Версия Python: 3.11.0

views.py

def search(request):
    search = request.POST["search"]
    blog_search = Blog.objects.filter(Q(title__icontains=search) | Q(description__icontains=search))
    paginator = Paginator(blog_search, 5)
    page_number = request.GET.get('page')
    blogs = paginator.get_page(page_number)
    return render(request,"frontend/searchblogs.html",{"blogs":blogs})

Использование:

views.py

def search(request):
    search = request.GET["search"]
    ...

Вы передаете GET-запрос через сервер (часть URL ?page), поэтому вам придется получить данные с помощью request.GET['name']. Вам также следует изменить метод формы на GET. Для поиска нет веских причин использовать POST.

<div class="container">
    <nav class="navbar navbar-light bg-light justify-content-end">
        <form class="form-inline" method="GET" action="{%url 'search' %}">
            {% csrf_token %}
          <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="search" id="search" >
          <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        </form>
      </nav>
...
</div>

Вот документация: https://docs.djangoproject.com/en/4.1/ref/request-response/#querydict-objects

Методы формирования: https://www.w3schools.com/tags/ref_httpmethods.asp

Если вы должны использовать метод POST, обратитесь к этому вопросу: Пагинация результатов POST запроса Django forms

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