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">« 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 »</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_
相关产品推荐
相关产品推荐

