views.py
def userlogout(request):
logout(request)
return HttpResponseRedirect(reverse('userlogin'))
def Search(request):
if request.method == 'POST':
search=request.GET['srch']
if search:
match=Blog.objects.filter(Q( blog_title_icontains=search)|
Q( blog_description_icontains=search)|
Q(blogcategories_icontains=search) )
if match:
return render (request,"search.html",{"sr":match})
else:
messages.error(request,"no results found")
else:
return HttpResponseRedirect('/search/')
return render (request,'index.html')
#
index.html
<form action="{%url 'search' %}" method="post" class="form-inline my-2 my-lg-0 header-search">
{% csrf_token %}
<input class="form-control mr-sm-2" type="search" placeholder="Search here..." name="Search" required="">
<button class="btn btn1 my-2 my-sm-0" type="submit">
<i class="fas fa-search"></i>
</button>
</form>
blog / urls.py
path('search/', views.Search, name='search'),
*****它给我错误:
Exception Type: MultiValueDictKeyError
Exception Value:
'srch'
请帮助我如何使用现有模板在博客中进行搜索。
答案 0 :(得分:1)
您有几个错误。
您的搜索字段称为Search
,而不是srch
。我不知道您从哪里得到srch
,因为您从未在模板中使用它。
您的表单是由POST提交的,但是您正在尝试从GET获取数据。
但是实际上,搜索表单应该由GET而不是POST提交,因为它不会在后端进行更改并且可以缓存。
所以您需要:
<form action="{%url 'search' %}" method="get" class="form-inline my-2 my-lg-0 header-search">
...
def Search(request):
search=request.GET['Search']
if search: