Как обработать эту ошибку, когда пользователь ищет, но ничего не передает, и нашел подобную ошибку в 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 конструкции словаря

Вернуться на верх