Cette vue fonctionne lorsque la requête est dans la base de données.Comment intercepter l'erreur 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.')
Donc, si q=delelle il trouve d'autres avocats dans la base de données qui est diplômé de la même école la même année. Si q=collins et collins est dans la base de données mais il n'y a pas d'autres avocats diplômés de la même école la même année, il donne alors le message d'erreur approprié "Aucun avocat ne correspond à vos critères de recherche."
Mais si q=moritz et il n'y a aucun avocat nommé moritz
dans la base de données alors il donne une erreur interne de serveur 500.
Je ne comprends pas la notation request.GET['q']
ou comment je peux corriger cela afin que je puisse ajouter le texte approprié pour le cas où la requête ne se trouve pas dans la base de données. Pouvez-vous me diriger dans la bonne direction? Merci.
Modifier re Antony Hatchkins répondre
Le code ci-dessous fonctionne sans donner l'erreur. Je vais essayer d'intégrer le reste bientôt:
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.')
Votre La fonction d'origine prendrait un élément aléatoire de la base de données si plusieurs éléments correspondent, ce qui est douteux. Ce code informera sur la question –
Merci. Je n'ai pas réalisé cela. Mais je pense, vous avez édité votre réponse initiale. Au début, je ne pouvais pas le faire fonctionner, puis j'ai changé un peu, maintenant ça marche. J'ai créé un nouveau modèle not_in_database.html et cela va le gérer. Je posterai le code sous peu. J'apprécierais les commentaires. Merci. – Zeynel
Bienvenue. Oui, j'ai corrigé une faute de frappe ou deux. –