これが私の 2 つの検索機能の間で発生している理由がわかりません。
ここに私の最初の検索機能があります
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
books = Book.objects.filter(title__icontains = q)
return render_to_response('search_results.html', {'books': books, 'query': q})
else:
return render_to_response('search_form.html', {'error': True})
この機能で、入ると
http://127.0.0.1:8000/search/
ブラウザに表示されるのは、検索バーと作成したメッセージです。また、検索ボタンを押すと、リンクが自動的に更新されます
http://127.0.0.1:8000/search/?q=
ただし、私の検索機能の 2 番目のバージョンでは
def search(request):
error = False
if 'q' in request.GET['q']:
q = request.GET['q']
if not q:
error = True
else:
books = Book.objects.filter(title__icontains = q)
return render_to_response('search_results.html', {'books': books, 'query': q})
return render_to_response('search_form.html',{'error':error})
私が入るとしたら
http://127.0.0.1:8000/search/
私のブラウザに、私は取得します
Exception Type: MultiValueDictKeyError
Exception Value: "Key 'q' not found in <QueryDict: {}>"
ブラウザで手動でリンクを作成する場合
http://127.0.0.1:8000/search/?q=
エラー メッセージは消えますが、パフォーマンス検索を行った場合、検索バーに入力して検索を実行したリンクを更新する以外は何もしない検索バーしか表示されません。
EX: searched for eggs --> http://127.0.0.1:8000/search/?q=eggs
ここに私のHTMLファイルがあります
search_results.html
<p>You searched for: <strong>{{ query }}</strong></p>
{% if books %}
<p>Found {{ books|length }} book{{ books|pluralize }}.</p>
<ul>
{% for book in books %}
<li>{{ book.title }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books matched your search criteria.</p>
{% endif %}
search_form.html
<html>
<head>
<title>Search</title>
</head>
<body>
{% if error %}
<p style = "color: red;">Please submit a search term.</P>
{% endif %}
<form action = "/search/" method = "get">
<input type = "text" name = "q">
<input type = "submit" value = "Search">
</form>
</body>
</html>
どんな助けでも大歓迎です!ありがとう!