Django:搜索结果页搜索框无法回显用户查询内容的问题
解决Django搜索框回显用户查询内容的问题
嘿,我一眼就瞅到你代码里的问题啦!你在views.py里的search函数犯了个小错误,导致查询内容没法传到模板里回显。
问题根源
你看这段代码:
context_dict = {'result_list': result_list, 'query': query} context_dict = {'result_list': resu...
你先把query和result_list都放进了context_dict,但紧接着又重新给context_dict赋值了一个不包含query的字典(还没写完),这直接把之前的query给覆盖掉了!模板自然拿不到搜索关键词,也就没法回显了。
修复后的views.py代码
我帮你调整了代码,不仅修复了重复赋值的问题,还加了query的初始化,避免用户直接访问搜索页(GET请求)时模板报错:
def search(request): result_list = [] query = '' # 初始化query,处理GET请求的情况 if request.method == 'POST': query = request.POST['query'].strip() if query: print(query) print(type(query)) # 调用Webhose搜索函数获取结果列表 result_list = run_query(query) # 把context_dict放在if外面,确保所有请求都能传递query context_dict = {'result_list': result_list, 'query': query} return render(request, '你的搜索模板文件名.html', context_dict)
模板里的搜索框写法
接下来在你的搜索结果页模板里,要把query赋值给输入框的value属性,这样就能回显用户的搜索内容了:
<form method="POST" action="{% url 'search' %}"> {% csrf_token %} <!-- Django POST表单必须加这个哦 --> <input type="text" name="query" value="{{ query }}" placeholder="输入搜索关键词..."> <button type="submit">搜索</button> </form>
额外提示
如果之后你想改成GET请求的搜索(比如让搜索结果可以被收藏分享),只需要把request.POST改成request.GET.get('query', ''),同时表单的method改成GET就行啦。
内容的提问来源于stack exchange,提问作者farschmessivo
相关产品推荐
相关产品推荐

