Листинг Viewview не работает правильно Django - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в Django, поэтому я застрял в нумерации на основе классов, и я следил за многими постами о нумерации страниц, но, к сожалению, не смог решить эту ошибку.

, если я ищу "love" в окне поискапоэтому URL-адрес становится таким

http://127.0.0.1:8000/search/?q=love

, и результаты отображаются с функцией нумерации страниц, но когда я нажимаю на следующую кнопку нумерации страниц, тогда запрос get remove и URL становятся такими

http://127.0.0.1:8000/search/?page=2

и ошибка: неверная страница (2): эта страница не дает результатов

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

Views.py

from django.views import generic
from .models import Album, Song
from django.db.models import Q

class Search(generic.ListView):
    template_name = 'music/search.html'
    paginate_by = 5  

    def get_queryset(self, *args, **kwargs):
        queryset_list = Song.objects.all()
        query = self.request.GET.get('q')
        if query:
            queryset_list = queryset_list.filter(
                Q(song_title__icontains=query)|
                Q(file_type__icontains=query)
                ).distinct()
        if not query:
            queryset_list = Song.objects.none()
            return queryset_list
        return queryset_list

search.html

{% if object_list %}
    <h1>Search result..</h1>
    {% for i in object_list %}
        <p>{{i.song_title}}</p>
    {% endfor %}

    <!-- pagination-->
    {% if is_paginated %}
          <ul class="pagination">
            {% if page_obj.has_previous %}
              <li><a href="?page={{ page_obj.previous_page_number }}">&laquo;</a></li>
            {% else %}
              <li class="disabled"><span>&laquo;</span></li>
            {% endif %}
            {% for i in paginator.page_range %}
              {% if page_obj.number == i %}
                <li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
              {% else %}
                <li><a href="?page={{ i }}">{{ i }}</a></li>
              {% endif %}
            {% endfor %}
            {% if page_obj.has_next %}
              <li><a href="?page={{ page_obj.next_page_number }}">&raquo;</a></li>
            {% else %}
              <li class="disabled"><span>&raquo;</span></li>
            {% endif %}
          </ul>
    {% endif %}
    <!-- end pagination-->

{% else %}
    <h1>no result found..</h1>
{% endif %}

urls.py

from django.conf.urls import url
from music import views

url(r'^search/$', views.Search.as_view(), name='search')

1 Ответ

0 голосов
/ 17 мая 2018

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

<a href="?q={{ request.GET.q }}&page={{ page_obj.previous_page_number }}">

и аналогично для всех других ссылок.

...