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
相关产品推荐
相关产品推荐

