이 뷰는 쿼리가 데이터베이스에있을 때 작동합니다.Django request.GET 오류를 잡는 방법?
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
q_school = Lawyer.objects.filter(last__icontains=q).values_list('school', flat=True)
q_year = Lawyer.objects.filter(last__icontains=q).values_list('year_graduated', flat=True)
lawyers = Lawyer.objects.filter(school__icontains=q_school[0]).filter(year_graduated__icontains=q_year[0]).exclude(last__icontains=q)
return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
else:
return HttpResponse('Please submit a search term.')
그래서, q=delelle는이 같은 해에 같은 학교를 졸업 한 데이터베이스에서 다른 변호사를 발견합니다.
및 collins가 데이터베이스에 있지만 같은 해에 같은 학교를 졸업 한 다른 변호사가 없다면 "변호사가 검색 기준과 일치하지 않습니다."라는 적절한 오류 메시지가 나타납니다.
그러나 q=moritz이고 데이터베이스에 moritz
이라는 변호사가없는 경우 500 내부 서버 오류가 발생합니다.
request.GET['q']
표기법을 이해하지 못하거나이 문제를 해결하여 데이터베이스에 쿼리가없는 경우 대문자를 추가 할 수 있습니다. 올바른 방향으로 나를 가르쳐 주시겠습니까? 감사.
편집 다시 안토니 Hatchkins는
아래의 코드는 오류를 포기하지 않고 작동 대답합니다. 나는 곧 나머지를 통합하려고합니다 :
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
lawyer = Lawyer.objects.filter(last__icontains=q)
if len(lawyer)==0:
return render_to_response('not_in_database.html', {'query': q})
else:
q_school = Lawyer.objects.filter(last__icontains=q).values_list('school', flat=True)
q_year = Lawyer.objects.filter(last__icontains=q).values_list('year_graduated', flat=True)
lawyers = Lawyer.objects.filter(school__icontains=q_school[0]).filter(year_graduated__icontains=q_year[0]).exclude(last__icontains=q)
return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
else:
return HttpResponse('Please submit a search term.')
당신의 원래 함수는 데이터베이스에서 임의의 항목을 취합니다. 여러 항목이 일치하는 경우 의심 스러우며 예상 한 것입니다. 이 코드는 문제에 대해 알려 드릴 것입니다 –
감사합니다. 나는 이것을 깨닫지 못했다. 하지만 제 생각에, 당신은 초기 대답을 편집했습니다. 처음에 나는 그것을 작동시키지 못했고, 조금은 바뀌 었습니다. 이제는 작동하고 있습니다. 새 템플릿 not_in_database.html을 만들었습니다. 그러면이 템플릿이 처리됩니다. 조만간 코드를 게시 할 예정입니다. 나는 주석을 고맙게 생각한다. 감사. – Zeynel
환영합니다. 예. 오타 또는 2 개를 수정했습니다. –