搜索在哪里出错?

时间:2019-05-15 15:22:40

标签: python django

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'

请帮助我如何使用现有模板在博客中进行搜索。

1 个答案:

答案 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: