You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django实现表格分页后如何添加可检索所有页面数据的搜索框

实现全表搜索+分页功能方案

1. 调整views.py逻辑

核心逻辑是先根据搜索关键词过滤全表数据,再对过滤后的结果做分页,避免搜索只作用于单页数据。修改后的代码如下:

def Browse_and_adopt(request):
    # 获取搜索关键词
    search_q = request.GET.get('search', '').strip()
    # 先过滤全表数据
    if search_q:
        Title_list = Title.objects.filter(title__icontains=search_q)
    else:
        Title_list = Title.objects.all()
    page = request.GET.get('page', 1)

    paginator = Paginator(Title_list, 10)
    # get_page已经自动处理页码非法、空页异常,原有try-except逻辑可直接删除
    page_obj = paginator.get_page(page)

    # 将搜索关键词传回模板,用于表单回填和分页参数传递
    return render(request, 'bms/inbox/Browse_and_adopt.html', {'page_obj': page_obj, 'search_q': search_q})

注:原有代码中Titles和page_obj作用重复,模板里只用了page_obj,所以可以直接删除冗余的Titles相关逻辑。


2. 调整Browse_and_adopt.html模板

需要新增搜索提交表单,同时修改分页链接,保证切换分页时搜索参数不会丢失:

<!-- 新增搜索表单,放在表格上方 -->
<div class="search-box">
    <form method="get" action="">
        <input type="text" name="search" placeholder="请输入标题关键词" value="{{ search_q }}">
        <button type="submit">搜索</button>
    </form>
</div>

<table id="myTable">
    <thead>
    <tr>
        <th>Title</th>
    </tr>
    </thead>
    <tbody>
    {% for book in page_obj %}
    <tr>
        <td>{{ book.title }}</td>
    </tr>
    {% endfor %}
    </tbody>
</table>
<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <!-- 分页链接追加搜索参数 -->
            <a href="?page=1&search={{ search_q }}">&laquo; first</a>
            <a href="?page={{ page_obj.previous_page_number }}&search={{ search_q }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
        </span>

        {% if page_obj.has_next %}
            <!-- 分页链接追加搜索参数 -->
            <a href="?page={{ page_obj.next_page_number }}&search={{ search_q }}">next</a>
            <a href="?page={{ page_obj.paginator.num_pages }}&search={{ search_q }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

功能说明

修改后搜索请求会先从全表匹配符合条件的记录,再对匹配结果做分页,所有分页的内容都属于搜索命中的结果,切换分页时搜索参数会一直携带,不会出现跳转分页后搜索条件失效的问题。

内容的提问来源于stack exchange,提问作者Django

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 17:54:02