Как отловить ошибку Django request.GET? - PullRequest
1 голос
/ 14 января 2010

Это представление работает, когда запрос находится в базе данных.

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 , то в базе данных будут найдены другие юристы, окончившие ту же школу в том же году.

если q = коллинз и коллинз есть в базе данных, но нет других юристов, окончивших ту же школу в том же году, тогда выдается соответствующее сообщение об ошибке «Ни один юрист не соответствует вашим критериям поиска». 1010 *

Но если q = moritz и в базе данных нет адвоката по имени moritz, это выдает внутреннюю ошибку сервера 500.

Я не понимаю обозначение request.GET['q'] или как я могу это исправить, чтобы я мог добавить соответствующий текст для случая, когда запрос отсутствует в базе данных. Можете ли вы указать мне в правильном направлении? Благодаря.

Изменить ответ Энтони Хэтчкинс

Приведенный ниже код работает без сообщения об ошибке. Я постараюсь включить остальные в ближайшее время:

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.')

Ответы [ 2 ]

2 голосов
/ 14 января 2010
def search(request):
    q = request.GET.get('q', '')
    if q:
        lawyers = Lawyer.objects.filter(last__icontains=q)
        if len(lawyers)==0:
            return HttpResponse('No such lawyer')
        if len(lawyers)>1:
            return HttpResponse('Several lawyers matched')
        lawyers1 = Lawyer.objects.filter(school=lawyers[0].school).filter(year_graduated=lawyers[0].year).exclude(pk=lawyers[0].pk)        
        return render_to_response('search_results.html', {'lawyers': lawyers1, 'query': q})
    else:
        return HttpResponse('Please submit a search term.')

request.GET['q'] извлекает поле q из объекта запроса GET браузера клиента

1 голос
/ 14 января 2010

Это должно сработать (не проверено):

def search(request):
    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']
        try:
            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)        
        except Lawyer.DoesNotExist:
            lawyers = []
        return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
    else:
        return HttpResponse('Please submit a search term.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...