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

Django新手求助:搜索模型数据无结果,如何在模板展示搜索结果?

搞定Django搜索无结果的问题

嘿,作为Django老玩家,我一眼就瞅到你代码里的几个小问题,咱们一个个来修复:

1. 最关键的:没把搜索结果传给模板

你在视图里辛辛苦苦查出来的results,根本没通过render函数传给模板!模板拿不到数据,当然显示不出结果啦。把最后一行改成这样:

return render(request, 'account/index.html', {'results': results})

2. 处理空搜索的情况

如果用户啥都没输入就点搜索,query会是None,这时候__icontains=None会直接返回空集。咱们加个判断,只有当有搜索关键词的时候才执行查询:

def search(request):
    query = request.GET.get('q')
    results = Myhouses.objects.none()  # 默认返回空的查询集
    if query:  # 关键词不为空才搜索
        results = Myhouses.objects.filter(
            Q(name_of_accomodation__icontains=query) | 
            Q(type_of_room__icontains=query) | 
            Q(location__icontains=query)
        )
    return render(request, 'account/index.html', {'results': results})

3. 确保模板正确渲染结果

模板里得有遍历结果的代码才行,比如这样写:

{% if results %}
    <div class="search-results">
        {% for house in results %}
            <div class="house-item">
                <h3>{{ house.name_of_accomodation }}</h3>
                <p>房型:{{ house.type_of_room }} | 位置:{{ house.location }}</p>
            </div>
        {% endfor %}
    </div>
{% else %}
    {% if query %}
        <p>抱歉,没找到匹配的房源😅</p>
    {% else %}
        <p>请输入关键词开始搜索吧~</p>
    {% endif %}
{% endif %}

额外要检查的小细节

  • 核对Myhouses模型的字段名!比如name_of_accomodation是不是少写了一个m?正确拼写应该是name_of_accommodation(两个m),字段名错了肯定查不到
  • 确认数据库里真的有数据,别是因为数据库为空导致的无结果
  • 看一眼浏览器地址栏,搜索后是不是有?q=你输入的关键词,确保参数正确传到了后端

按照上面的步骤调整后,应该就能正常搜到结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:11