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

Django搜索结果分页跳转空白问题求助(附代码)

Django搜索分页翻页空白问题解决

问题描述

使用Django开发CVE查询页面,数据库存储数千条CVE数据,搜索功能可正常展示第一页结果,但点击分页的"下一页"或其他页码时,页面变为空白。

原因分析

分页链接仅传递了page参数,未携带搜索关键词searched。翻页时后端无法获取到搜索关键词,进入else分支,返回无数据的模板页面。

解决方案

1. 修改模板中的分页链接

将所有分页跳转的URL补充上searched参数,确保翻页时携带搜索关键词:

修改后的模板分页部分代码:

<nav aria-label="Page navigation example">
    <ul class="pagination justify-content-center">
        {% if cves.has_previous %}
            <li class="page-item"><a class="page-link" href="?searched={{ searched }}&page=1">&laquo; First</a></li>
            <li class="page-item"><a class="page-link" href="?searched={{ searched }}&page={{ cves.previous_page_number }}">Prev</a></li>
        {% endif %}

        {% for pg in page_range %}
            {% if cves.number == pg %}
                <li class="page-item"><a class="page-link" href="?searched={{ searched }}&page={{ pg }}" class="btn btn-default">{{ pg }}</a></li>
            {% else %}
                <li class="page-item"><a class="page-link" href="?searched={{ searched }}&page={{ pg }}" class="btn">{{ pg }}</a></li>
            {% endif %}
        {% endfor %}

        {% if cves.has_next %}
            <li class="page-item"><a class="page-link" href="?searched={{ searched }}&page={{ cves.next_page_number }}">Next</a></li>
            <li class="page-item"><a class="page-link" href="?searched={{ searched }}&page={{ cves.paginator.num_pages }}">Last &raquo;</a></li>
        {% endif %}
    </ul>
</nav>

2. 优化视图代码(可选)

原视图中异常处理可以更精准,使用Django分页器提供的专用异常类,避免捕获所有异常:

修改后的views.py代码:

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage

def search_cve(request):
    if request.method == 'GET':
        searched = request.GET.get('searched')
        if searched:
            cve_search = BDSA.objects.filter(cve_id__icontains=searched).order_by('-cve_id')
            paginator = Paginator(cve_search, 10)  # show 10 per page
            page = request.GET.get('page')
            
            try:
                cves = paginator.page(page)
            except PageNotAnInteger:
                # 如果page不是整数,返回第一页
                cves = paginator.page(1)
            except EmptyPage:
                # 如果page超出范围,返回最后一页
                cves = paginator.page(paginator.num_pages)
            
            index = cves.number - 1
            max_index = len(paginator.page_range)
            start_index = index - 2 if index >= 2 else 0
            end_index = index + 2 if index <= max_index - 2 else max_index
            page_range = list(paginator.page_range)[start_index:end_index]
            
            return render(request, 'QueryService/search_cve.html', {
                'searched': searched, 
                'cves': cves, 
                'page_range': page_range
            })
        else:
            return render(request, 'QueryService/search_cve.html', {})

说明

  • 核心修复点是模板中分页URL携带searched参数,确保翻页时后端能获取到搜索条件,正确过滤数据。
  • 视图优化是为了让异常处理更规范,避免不必要的错误跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:40:29