如何将Django搜索框输入值传递到搜索结果页展示
你没法在搜索结果页拿到查询关键词,核心原因是没有把关键词变量传到模板渲染的上下文里,按下面步骤修改即可:
第一步:修改views.py,把查询关键词加入上下文
你原来的代码还有重复过滤的冗余,优化后的完整代码如下:
def search_qa_results(request): # 加默认空字符串避免获取不到参数时报错 query = request.GET.get('q', '') qa_list = QA.objects.all() if query: # 只有存在查询关键词时才执行过滤 lookups = Q(title__icontains=query) qa_list = QA.objects.filter(lookups) context = { 'qa_list': qa_list, # 把查询关键词加入上下文,模板才能读取到这个变量 'query': query } return render(request, 'search/search_qa.html', context)
第二步:修改搜索结果模板的占位位
把search_results.html里的{{WHAT TO PUT HERE?}}直接替换成{{ query }}即可:
<div class="d-flex justify-content-start"> Search results for my question: {{ query }}</div>
额外修复前端搜索按钮的异常
你当前的搜索图标用的是a标签,用户点击这个图标会直接跳转搜索页,不会带上输入框的查询参数,只有按回车才能正常搜索,建议替换成submit类型按钮:
把index.html里的这段代码
<a href="{% url 'search_qa_results' %}" class="search_icon"><i class="fas fa-search"></i></a>
替换为
<button type="submit" class="search_icon" style="border:none;background:none;"><i class="fas fa-search"></i></button>
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

