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

Django项目搜索功能异常:搜索结果无法在模板中显示

Django搜索功能无数据显示问题修复

核心问题:模板变量名不匹配

你在views.py的account_search视图中,传递给模板的查询结果变量是accounts,但在account_search.html模板里,循环遍历用的是userprofiles,这直接导致模板找不到要渲染的数据,所以没有内容显示。

修正步骤

修改account_search.html中的循环变量:

<!-- 把原来的循环行 -->
{% for userprofile in userprofiles %}
<!-- 改成 -->
{% for userprofile in accounts %}

次要问题:IntegerField使用contains的潜在隐患

你的use_id是IntegerField,使用__contains查询时,Django会把输入的字符串转成数字匹配,但如果用户输入非数字内容,可能引发隐性错误。可以二选一修复:

  • 方式一:先校验输入再转整数查询(更严谨)
from django.db.models import Q

def account_search(request):
    if request.method == "POST":
        account_search = request.POST.get('acc_search')
        # 先构建字符串字段的查询条件
        query = Q(first_name__contains=account_search) | Q(last_name__contains=account_search) | Q(position__contains=account_search) | Q(email__contains=account_search)
        # 如果输入是数字,再添加use_id的精确匹配
        if account_search.isdigit():
            query |= Q(use_id=int(account_search))
        accounts = Userprofile.objects.filter(query)
        return render(request, 'core/account_search.html', {'account_search': account_search, 'accounts':accounts})
    else:
        return render(request, 'core/account_search.html', {})
  • 方式二:改用__icontains(自动把数字转字符串匹配)
    把views.py中use_id__contains改成use_id__icontains即可。

额外优化:修复HTML结构错误

account_list.html的form里有个多余的</p>标签,建议删除避免结构异常:

<!-- 原代码 -->
<input type="submit" name="submit" value="Search" style="width: 24%"></p>
<!-- 修改后 -->
<input type="submit" name="submit" value="Search" style="width: 24%">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:05:49