Получение MultiValueDictKeyError, возможно, из-за помех
Я сделал основную функцию поиска в моем базовом html-файле, а затем сделал фильтры для конкретных поисков. базовый html-файл называется consult_home.html.
consult_home.html
<form method="GET" action="{% url 'search' %}">
<input type="search" placeholder="Search with any keyword..." name="searched" />
<button class="srch-bttn" type="submit">SEARCH  <i class="fas fa-search"></i></button>
</form>
а функция представления, которая обрабатывает вышеуказанную форму, выглядит следующим образом
view.py
def search_univ(request): # SEARCHED CONTENT WILL BE DSIPLAYED IN THSI PAGE BAR IS IN CONSULT_HOME.HTML
searched= request.GET['searched'].lower()
if len(searched)>78 or len(searched)<1:
search_result = Laws.objects.none()
#return HttpResponse('The search is invalid. Please return back to previous page.')
else:
search_resul_Lawcat= Laws.objects.filter(law_category__icontains=searched)
search_result_Judge =Laws.objects.filter(judgements__icontains=searched)
search_result_Title =Laws.objects.filter(title__icontains=searched)
search_result= search_resul_Lawcat.union(search_result_Judge, search_result_Title)
if search_result.count() == 0:
messages.warning(request, 'No search results found...')
return render(request, 'search.html', {'searched': searched, 'search_result':search_result})
Сейчас я добавил кнопку для более конкретного поиска, которая ведет на страницу и коды в ней
поиск_цитат
<form method="POST" action="{% url 'search' %}">
{% csrf_token %}
<input class="citation-srch" type="search" placeholder="eg. SCC(volume number) (page number) etc..." name="query" />
<button class="srch-citation-bttn" type="submit"><i class="fas fa-search"></i></button>
</form>
и функция представления, которая обрабатывает вышеуказанную форму, является
vews.py
def srch_by_citation(request):
if request.method == 'POST':
searched_citation = request.POST.get['query']
if len(searched_citation)>78 or len(searched_citation)<1:
search_result = Laws.objects.none()
else:
search_result = Laws.objects.filter(equivalent_citations__icontains=searched_citation)
if search_result.count() == 0:
messages.warning(request, 'No search results found...')
return render(request, 'search.html',{'search_result':search_result})
else:
return render(request, 'search_citation.html')
Сейчас при попытке поиска со страницы "search_citation.html" я получаю эту ошибку
.MultiValueDictKeyError at /consultancy/search
'searched'
Request Method: POST
Request URL: http://127.0.0.1:8000/consultancy/search
Django Version: 3.2.4
Exception Type: MultiValueDictKeyError
Exception Value:
'searched'
Exception Location: C:\Users\Intel\Envs\test\lib\site-packages\django\utils\datastructures.py, line 78, in __getitem__
Python Executable: C:\Users\Intel\Envs\test\Scripts\python.exe
Python Version: 3.7.4
Python Path:
['C:\\Users\\Intel\\Envs\\test\\project',
'c:\\users\\intel\\appdata\\local\\programs\\python\\python37\\python37.zip',
'c:\\users\\intel\\appdata\\local\\programs\\python\\python37\\DLLs',
'c:\\users\\intel\\appdata\\local\\programs\\python\\python37\\lib',
'c:\\users\\intel\\appdata\\local\\programs\\python\\python37',
'C:\\Users\\Intel\\Envs\\test',
'C:\\Users\\Intel\\Envs\\test\\lib\\site-packages']
Server time: Sun, 29 Aug 2021 12:26:58 +0000
Какова причина этой ошибки и что я должен сделать, чтобы ее устранить.
Скорее всего, потому что в search_citation.html
вы все еще используете {% url 'search' %}
, который переходит к представлению search_univ
, но, похоже, вы хотели использовать url для srch_by_citation
.
Так в search_citation.html
:
<form
method="POST"
action="{% url 'search' %}"> <-- Change this to the url of `srch_by_citation`
...
</form>