关键字参数匹配时找不到带有关键字参数的NoReverseMatch

时间:2019-10-10 23:15:12

标签: django

我遇到了错误:

  

找不到带有关键字参数'{'search_terms':''}'的'search_blog'。尝试了1种模式:['blog / search /(?P [^ /] +)/ $']

所以,我的参数匹配,但是我得到了NoReverseMatch ...

我尝试从“ search_blog”路径中删除<str:search_terms>模式,并从我的反向调用中排除了kwargs参数,并且有效。因此,问题必须仅在于网址格式。我尝试将模式重命名为“条款”,但遇到了相同的错误:

  

找不到带有关键字参数'{'terms':''}'的'search_blog'。尝试了1种模式:['blog / search /(?P [^ /] +)/ $']

以下是相关片段:

urls.py

path('search/', views.nav_search_input, name='nav_search_input'),
path('search/<str:search_terms>/', views.search_blog, name='search_blog'),

views.py

def nav_search_input(request):
    if request.method == 'POST':
        form = SearchBlog(request.POST)

        if form.is_valid():
            return HttpResponseRedirect(reverse('search_blog', kwargs={'search_terms': form.cleaned_data['search_terms']}))

    else:
        form = SearchBlog()

    context = {
        'form': form
    }

    return render(request, 'index.html', context)


def search_blog(request, search_terms=''):
    posts = Post.objects.all()
    form = SearchBlog()

    if form.is_valid():
        posts = Post.objects.all().filter(title__contains=search_terms)

    context = {
        'form': form,
        'posts': posts
    }

    return render(request, 'blog/search_blog.html', context)

forms.py (如果需要)

class SearchBlog(forms.Form):
    search_terms = forms.CharField(required=False)

    def clean_search_terms(self):
        search_terms = self.cleaned_data['search_terms']
        return search_terms

通过nav_search_input视图,我可以使用base.html中的表单,以便可以从导航中的任何页面搜索站点。然后,表单输入数据应通过nav_search_input进入显示结果的search_blog视图。但是,当我从导航表单中搜索时,只会得到错误。

1 个答案:

答案 0 :(得分:0)

从罗马到罗马:请检查您的基本模板。检查与search_blog表单有关的每个文件。该错误可能会出现在您意料之外的地方(显然是因为您没有从模板中发布代码段)。

向与表单输入字段变量名称<input type="search" name="search_terms">相匹配的字符字段添加名称。 (我不想删除这个问题,所以我自己回答了,希望我可以结束这个问题。)