NoReverseMatch с аргументами ключевого слова не найдено, когда аргументы ключевого слова совпадают - PullRequest
1 голос
/ 11 октября 2019

Я получаю сообщение об ошибке:

Реверс для '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, где отображаются результаты. Однако я просто получаю сообщение об ошибке при поиске из формы навигации.

1 Ответ

0 голосов
/ 11 октября 2019

От римского к римскому: пожалуйста, проверьте ваш базовый шаблон. Проверьте каждый файл, имеющий отношение к форме search_blog. Ошибка может появиться там, где вы не ожидаете (очевидно, что вы не разместили фрагмент из шаблона).

Добавить имя в символьное поле, соответствующее имени переменной поля ввода формы: <input type="search" name="search_terms">. (Я не хотел удалять этот вопрос, поэтому я сам ответил на него, хотелось бы закрыть этот вопрос.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...