Как обработать эту ошибку, когда пользователь ищет, но ничего не передает, и нашел подобную ошибку в Django, но пользовательский ввод id работает
views.py
def paitent(request):
search_query = ''
if request.GET.get('search_query'):
search_query = request.GET.get('search_query')
if search_query == ' ':
print('Ex')
else:
userprofile = Profile.objects.filter(id=search_query)
profiles = Totallcount.objects.filter(image_owner=search_query)
context = {
'profiles':profiles,
'userprofile':userprofile,
}
return render(request, "medical_report/paitent.html",context)
paitent.html
<form class="d-flex ms-auto my-3 my-lg-0" id='searchForm' action="{% url 'paitent' %}" method="get">
<div class="input-group">
<input
class="form-control"
type="search"
placeholder="Search by Name"
aria-label="Search"
id="formInput#search" type="text" name="search_query" value="" />
<button class="btn btn-primary" type="submit" value="Search">
<i class="bi bi-search"></i>
</button>
</div>
</form>
Ошибка.
UnboundLocalError at /paitent/
local variable 'profiles' referenced before assignment
Request Method: GET
Request URL: http://127.0.0.1:8000/paitent/?search_query=
Django Version: 3.2.15
Exception Type: UnboundLocalError
Exception Value:
local variable 'profiles' referenced before assignment
Exception Location: C:\Users\21100002\Desktop\myreports\medical_report\views.py, line 176, in paitent
Python Executable: C:\Users\21100002\Desktop\ocr\env\Scripts\python.exe
Python Version: 3.7.0
Посмотрите на этот раздел:
if request.GET.get('search_query'):
search_query = request.GET.get('search_query')
if search_query == ' ':
print('Ex')
else:
userprofile = Profile.objects.filter(id=search_query)
profiles = Totallcount.objects.filter(image_owner=search_query)
context = {
'profiles':profiles,
'userprofile':userprofile,
}
return render(request, "medical_report/paitent.html",context)
Если Если search_query
равно пробелу " "
, то он печатает ('Ex'
) и переходит к контексту, где ему нужно profiles
, но он не установил эту переменную. Вам нужно создать соответствующие значения в if search_query == ' '
и добавить else
для условия if request.GET.get('search_query')
, в примере так:
if request.GET.get('search_query'):
search_query = request.GET.get('search_query')
if search_query == ' ':
print('Ex')
userprofile = Profile.objects.all()
profiles = Totallcount.objects.all()
else:
userprofile = Profile.objects.filter(id=search_query)
profiles = Totallcount.objects.filter(image_owner=search_query)
else:
userprofile = Profile.objects.all()
profiles = Totallcount.objects.all()
context = {
'profiles': profiles,
'userprofile': userprofile,
}
return render(request, "medical_report/paitent.html",context)
Каждая переменная, которую вы используете, должна быть изначально задана всеми возможными способами в вашем алгоритме.
Подумайте, что произойдет, если:
if request.GET.get('search_query')
... возвращает ложное значение.
В таком случае ни userprofile, ни profiles не будет существовать, но вы пытаетесь использовать их безоговорочно в вашей context конструкции словаря