我遇到了错误:
找不到带有关键字参数'{'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视图。但是,当我从导航表单中搜索时,只会得到错误。
答案 0 :(得分:0)
从罗马到罗马:请检查您的基本模板。检查与search_blog
表单有关的每个文件。该错误可能会出现在您意料之外的地方(显然是因为您没有从模板中发布代码段)。
向与表单输入字段变量名称<input type="search" name="search_terms">
相匹配的字符字段添加名称。 (我不想删除这个问题,所以我自己回答了,希望我可以结束这个问题。)