【问题标题】:Listview Pagination not working correctly djangoListview分页无法正常工作django
【发布时间】:2018-10-27 10:25:15
【问题描述】:

我是 Django 初学者,所以我被困在基于类的分页中,我关注了很多关于分页的帖子,但不幸的是无法解决这个错误。

如果我在搜索框中搜索“爱”,那么 URL 就会变成这样

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

结果显示带有分页功能,但是当我点击下一个分页按钮时,查询获取删除和 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')

【问题讨论】:

    标签: django python-2.7 pagination


    【解决方案1】:

    您没有在链接中包含搜索词,因此您可以看到 URL 不包含它,因此 get_queryset 返回一个空集。您应该确保在任何地方都包含它:

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

    对于所有其他链接也是如此。

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 2013-12-14
      • 2014-09-21
      • 2013-08-22
      • 2012-09-25
      • 2016-07-29
      • 2017-11-27
      • 1970-01-01
      相关资源
      最近更新 更多