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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:10:51