Я получаю сообщение об ошибке:
Реверс для 'search_blog' с аргументами ключевого слова '{' search_terms ':' '}' не найден. Попробован 1 шаблон (ов): ['blog / search / (? P [^ /] +) / $']
Итак, мои аргументы совпадают, и все же я получаю NoReverseMatch .. .
Я попытался удалить шаблон <str:search_terms>
из пути 'search_blog' и исключил параметр kwargs из моего обратного вызова, и это сработало. Таким образом, проблема должна лежать исключительно в шаблоне URL. Я попытался переименовать шаблон в «термины», но получил ту же ошибку:
Реверс для «search_blog» с аргументами ключевого слова «{'term»: «»} не найден. Приведено 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, где отображаются результаты. Однако я просто получаю сообщение об ошибке при поиске из формы навигации.