【问题标题】:django pagination returns all data after clicking any page in search result单击搜索结果中的任何页面后,django 分页返回所有数据
【发布时间】:2017-02-02 15:24:07
【问题描述】:

我对搜索结果进行分页。起初,查询集给了我完美的结果,初始页码指示正确,但是当点击任何页码时,它接受搜索键为空并从数据库中获取所有数据。 这是代码

def search(request):
    searchKey = request.POST.get("key", "")
    searchRequestsInitial = ScRequests.objects.filter(description__contains=searchKey)
    searchCount = searchRequestsInitial.count()

    page = request.GET.get('page', 1)
    paginator = Paginator(searchRequestsInitial, 10)

    try:
        searchRequests = paginator.page(page)
    except PageNotAnInteger:
        searchRequests = paginator.page(1)
    except EmptyPage:
        searchRequests = paginator.page(paginator.num_pages)

    context = {'searchRequests':searchRequests,'searchCount':searchCount,'searchKey':searchKey}
    template = "searchResult.html"
    return render(request,template,context)

在模板中:

    <tbody>
    {% if searchRequests %}
       {% for searchRequest in searchRequests %}
        <tr>
          <td>{{searchRequest.description|convert_utf8|shortName}}</td>
          <td>{{searchRequest.title|convert_utf8|shortName}}</td>
          <td>{{searchRequest.sender}}</td>
        </tr>
      {% endfor %}
    {% endif %}  
      </tbody>
    </table>

    {% if searchRequests.has_other_pages %}
      <ul class="pagination">
        {% if searchRequests.has_previous %}
          <li><a href="?page={{ searchRequests.previous_page_number }}">&laquo;</a></li>
        {% else %}
          <li class="disabled"><span>&laquo;</span></li>
        {% endif %}
        {% for i in searchRequests.paginator.page_range %}
          {% if searchRequests.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 searchRequests.has_next %}
          <li><a href="?page={{ searchRequests.next_page_number }}">&raquo;</a></li>
        {% else %}
          <li class="disabled"><span>&raquo;</span></li>
        {% endif %}
      </ul>
    {% endif %}

【问题讨论】:

    标签: django pagination


    【解决方案1】:

    您忘记在 url 中添加 key 参数:

    <li><a href="?page={{ searchRequests.previous_page_number }}">&laquo;</a></li>
    

    因此,当您单击链接时,key 值设置为 null。 像这样更改链接:

    <li><a href="?page={{ searchRequests.previous_page_number }}&key={{ searchKey }}">&laquo;</a></li>    
    

    更新

    此外,当您通过链接打开页面时,您正在使用 GET,因此还要添加以下内容:

    searchKey = request.POST.get("key", "")
    if not searchKey:
        searchKey = request.GET.get("key", "")     
    

    如果 POST 为空,它将从请求的 GET 中设置密钥。

    但是您可以将搜索表单方法更改为 GET,而不是这个,现在您可以简单地检查 GET 参数:

    searchKey = request.GET.get("key", "")
    

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 2021-10-03
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多