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

Django导航栏搜索功能异常:搜索存在食物无结果展示求助

修复你的Django搜索功能问题

我看了你的代码,发现几个关键问题导致搜索没结果,咱们一个个来解决:

1. 请求方式不匹配:POST vs GET

你的表单用的是method="get",但视图里却在尝试从self.request.POST获取搜索参数,这肯定拿不到值!GET请求的参数是在request.GET里的,所以修改views.py的get_queryset方法:

class SearchResultsView(ListView):
    model = Food
    template_name = "restaurant/food_search_results.html"
    context_object_name = "data"
    
    def get_queryset(self):
        query = self.request.GET.get("search")  # 改成GET获取参数
        if query:  # 简化判断,空字符串也会被视为False
            return Food.objects.filter(name__icontains=query)
        return Food.objects.none()  # 返回空QuerySet,而非None(避免ListView报错)

2. 提交按钮错误:用<a>标签代替了提交按钮

你表单里的"Search"按钮是个<a>标签,点击它会直接跳转到搜索页面,但不会提交表单里的搜索内容!应该换成<button>标签,这样点击时才会提交表单并携带搜索参数:

修改base.html里的表单部分:

<form class="form-inline my-2 my-lg-0" action="{% url 'search_results' %}" method="get">
    <!-- GET请求不需要csrf_token,可以去掉 -->
    <div class="input-group">
        <input name="search" type="text" class="form-control" placeholder="Search Foods ...">
        <div class="input-group-append">
            <button class="btn btn-outline-warning" type="submit">Search</button>
        </div>
    </div>
</form>

另外,表单的action直接用{% url 'search_results' %}比硬写/search更规范,避免后续URL变化时还要改模板。

3. 可选:URL路径末尾添加斜杠(推荐)

Django默认的APPEND_SLASH设置会自动处理,但为了规范,建议给urls.py里的搜索路径加上斜杠:

path("search/", SearchResultsView.as_view(), name='search_results'),

现在你再测试一下,应该就能正常搜索到食物了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:23:12