【问题标题】:Search result fails with pagination搜索结果因分页而失败
【发布时间】:2015-10-04 01:06:20
【问题描述】:

在我的 django 项目中,我使用 Django Endless Pagination 进行分页,并使用 haystack + elasticsearch 进行搜索。当我搜索特定内容时,请求方法是 POST 并且结果是正确的,但是当我尝试对搜索结果进行分页时,下一个请求被接收为 GET 并且搜索结果丢失并且整个内容被迭代。

这是我的代码:

views.py

@login_required(login_url="/")
@page_template('students/students_listing_block.html')
def students(request, template='students/students_listing.html', extra_context=None, *args, **kwargs):

    sqs = SearchQuerySet().models(Student)
    if request.POST:
        searchcontent = request.POST.get('content', None)
        if searchcontent:
            sqs = sqs.filter(content=searchcontent)
    students = sqs.order_by('-created_at')
    context = {
        'students': students,
    }
    if extra_context is not None:
        context.update(extra_context)
    return render_to_response(template, context,
           context_instance=RequestContext(request))

还有我的模板

 {% load endless %}
 {% lazy_paginate students %}
 {% for student in students %}
      // Do the displaying here
 {% endfor %}
 {% show_more %}

【问题讨论】:

    标签: django elasticsearch pagination django-haystack django-endless-pagination


    【解决方案1】:

    它是get请求,因为搜索的标准请求方法是GET。我的建议是将搜索的请求方法更改为 GET。

    或者,如果您想继续使用 POST,您需要更改每个页面链接的请求方法。这是一个很好的改变超链接请求方法的库。 https://github.com/rails/jquery-ujs

    <a href="/asd" data-method="post">TEST</a>
    

    【讨论】:

    • 首先当我搜索方法是 POST 并且我能够过滤结果并正确显示搜索结果,但是当我在搜索结果中分页到第二页时,请求更改为GET 并返回完整列表。在第二页的GET请求中,请求参数只有{u'querystring_key': [u'page'], u'page': [u'2']}
    • 可以,因为页面超链接默认请求方式是GET。您需要将其更改为 POST。
    • 我通过添加会话解决了这个问题,我从这个link得到了答案
    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2014-03-26
    • 2017-02-24
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多