如何捕获Django请求。获取错误?

如何捕获Django请求。获取错误?,django,django-forms,Django,Django Forms,当查询位于数据库中时,此视图起作用 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(la

当查询位于数据库中时,此视图起作用

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.')
因此,如果它在数据库中找到同一年毕业于同一所学校的其他律师

如果和collins在数据库中,但没有其他律师在同一年毕业于同一所学校,则会给出相应的错误消息“没有律师符合您的搜索条件。”

但是如果数据库中没有名为
moritz
的律师,那么它会给出一个500内部服务器错误

我不理解
请求。获取['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.')
request.GET['q']
从客户端浏览器的
GET
request对象中获取字段
q
,这应该可以做到(未测试):


如果有多个项匹配,那么您的原始函数将从数据库中随机抽取一个项,这无疑是您所期望的。此代码将通知有关问题的信息。我没有意识到这一点。但我认为,你编辑了你最初的答案。起初我不能让它工作,然后我改变了一点,现在它工作了。我在_database.html中创建了一个新模板not_,这将处理它。我将尽快发布代码作为编辑。我将感谢您的评论。谢谢,欢迎。是的,我修正了一两个打字错误。在我第一次尝试时,我又犯了500个错误。我可能做错了什么。
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.')
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.')