Djingo 分页器和过滤器 - 一个破坏另一个

问题描述 投票:0回答:1

我在views.py 中使用过滤器配置分页器时遇到问题。 当搜索结果拉出多页记录并且用户单击分页的第 1、2、3 页(例如进入下一页)时,它会破坏过滤器,因此会从数据库中拉出所有记录,而不是过滤的记录.

我正在使用 Bootstrap 5.0.2。这是我的代码:

views.py:

def group_search(request):
    if request.method == "GET":
        g_searched = request.GET.get("g_searched", 1)

        # Cache the variable "searched" for views.group_search_csv
        request.session['csv_searched'] = g_searched

        # multiple columns selected in search
        group_searched = Binders.objects.filter(Q(group_id__contains=g_searched))

        group_count = group_searched.count()
        p = Paginator(group_searched, 20)
        page = request.GET.get('page', 1)
        page_obj = p.get_page(page)
        pg_nums = "a" * page_obj.paginator.num_pages

        context = {'g_searched': g_searched, 'page_obj': page_obj, 'pg_nums': pg_nums, 'group_count': group_count}

        return render(request, "group_search.html", context)
    else:
        return render(request, "group_search.html", {}) 

Group_search.html:(我没有放置整个html页面的代码,因为大部分与这个问题无关。)

<!-- ======= Sub Menu Section ======= -->
 <section class="breadcrumbs">
   <div class="container-fluid">
     <div class="d-flex justify-content-around align-items-center">
        {% if g_searched %}
           <h2>You searched for group {{ g_searched }}</h2>
        {% else %}
           <h2>Search field is empty!</h2>
        {% endif %}
        <!-- added blank spaces before the forms for better spacing-->
        <a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
        <form action="{% url 'group_search' %}" class="d-flex" method=GET>
        <!--              {% csrf_token %}-->
        <input aria-label="Group Search" class="form-control me-2 " name="g_searched" placeholder="Search GROUPs" type="search">
        <button class="btn btn-outline-info" type="submit">Search</button>
        </form>
        <!-- added blank spaces after the forms for better spacing-->
        <a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
        <ol>
         <li><a href="{% url 'binders' %}">Binders Listing</a></li>
         <li><a href="{% url 'group_search_csv' %}">Download Spreadsheet</a></li>
         <li>Search Result = <b>{{ group_count }}</b></li>
        </ol>
     </div>
  </div>
 </section><!-- End Sub Menu Section -->

<!-- ======= Page Navigation Section ======= -->
<nav aria-label="Page navigation example">
  <ul class="pagination justify-content-center">
    {% if page_obj.has_previous %}
    <li class="page-item"><a class="page-link" href="?page=1">First</a></li>
    <li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a></li>
    {% endif %}

    {% for i in pg_nums %}
    <li class="page-item"><a class="page-link" href="?page={{ forloop.counter }}">{{ forloop.counter }}</a></li>
    {% endfor %}

    {% if page_obj.has_next %}
    <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a></li>
    <li class="page-item"><a class="page-link" href="?page={{ page_obj.paginator.num_core }}">Last</a></li>
    {% endif %}
  </ul>
</nav>

我已经到处寻找解决这个问题的方法,但还没有找到任何东西。如果您发现我的代码有什么问题,请告诉我。

html django-views django-filter paginator
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.