【问题标题】:Second page of Pagination not working in django after searching搜索后分页的第二页在 django 中不起作用
【发布时间】:2020-11-18 09:02:59
【问题描述】:

搜索结果没有出现在第二页我应该改变什么来解决我的问题?我正在使用弹性搜索作为搜索引擎 index.html

     <ul>
                        {% for i in paginator.page_range %}
                              {% if i <= page_number|add:5 and i >= page_number|add:-5 %}

                                 <li class=" {% if i == page_number %} active {% endif %} " >
                                   <a href="?page={{forloop.counter}}">{{forloop.counter}}</a>
                                 </li>

                              {% endif %}

                        {% endfor %}
                          </ul>

这是我的观点.py


def index(request):
    q = request.GET.get('q')
    if q:
        articles = PostDocument.search().query("match", title=q, )
        paginator = Paginator(articles, 5)
        page_number = request.GET.get('page', 1)
        page_obj = paginator.get_page(page_number)

        return render(request, 'index.html', {
            'articles': page_obj.object_list,
            'paginator': paginator,
            'page_number': int(page_number),

        })

    else:
        articles = ''
        return render(request, 'index.html', {'articles': articles})


【问题讨论】:

    标签: django templates elasticsearch view pagination


    【解决方案1】:

    如果您写?page=…,则?q=… 参数被“删除”。诀窍是在您转到下一个对象时将其添加到查询字符串中:

    def index(request):
        q = request.GET.get('q')
        if q:
            articles = PostDocument.search().query("match", title=q, )
            paginator = Paginator(articles, 5)
            page_number = request.GET.get('page', 1)
            page_obj = paginator.get_page(page_number)
    
            return render(request, 'index.html', {
                'articles': page_obj.object_list,
                'paginator': paginator,
                'page_number': int(page_number),
                'q' : q
            })
    
        else:
            articles = ''
            return render(request, 'index.html', {'articles': articles})

    然后使用:

    &lt;a href="?page={{ forloop.counter }}<b>&amp;q={{ q|urlencode }}</b>"&gt;{{forloop.counter}}&lt;/a&gt;

    |urlencode template filter [Django-doc] 是对查询进行百分比编码所必需的,例如,如果它包含问号 (?)、与号 (&amp;) 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多