Django中else分支不生效:搜索无结果无法跳转错误页
问题分析与解决方案
核心问题
你当前的代码逻辑偏差了:
- 视图里的
else分支只处理没有提交搜索关键词的场景(比如直接访问/search页面) - 当输入不存在的关键词(如"hello")时,
'searched'依然存在于request.GET中,会进入if分支,即使搜索结果为空,还是会返回search.html,所以模板只显示"Search results for hello."但没有商品,不会跳错误页。
修正方案
修改views.py中的search函数,在获取搜索结果后判断是否为空,无结果时跳转错误页:
def search(request): if 'searched' in request.GET: searched = request.GET['searched'] products = Product.objects.filter(title__icontains=searched) # 搜索结果为空时跳转错误页 if not products.exists(): return render(request, 'epharmacyweb/search_error.html') return render(request, 'epharmacyweb/search.html', {'searched': searched, 'products': products}) else: # 用户未提交搜索关键词,返回搜索页显示提示 return render(request, 'epharmacyweb/search.html')
补充说明
- 模板
search.html里的{% else %}分支是给直接访问/search页面的用户看的,无需修改,保留即可。 search_error视图可以保留(如果需要通过/search_error直接访问错误页),也可以删掉,因为现在已在search视图里直接渲染错误页。
内容的提问来源于stack exchange,提问作者cantony2
相关产品推荐
相关产品推荐

