2017-08-25 15 views
0

機能的な検索バーを作るために継承されたコードの操作に問題があります。私はsearch_resultsページを適切に作成するのが最も困難でした。Django、機能的な検索バーと検索結果ページを作成

search_resultsページを1行だけ削除しました。 search_results.html<div>You searched for {{ query }}</div>現在、search_resultsページは{{query}}を表示しません。ユーザーが以前に入力したテキストは表示されません。そのページに表示されることすべてが、私は少し慎重になっていた

searchbox.html

<form class="search" action="{% url 'search' %}" method='post'> 
    {% csrf_token %} 
    <input type="search" placeholder="Search here..." name="usr_query" 
     value='{{ query }}' required> 
    <button type="submit">Search</button> 
</form> 

views.py

def search(request): 
    query = request.POST['usr_query'] 
    print "QUERY: " 
    print query 
    t = loader.get_template('gtr_site/test_search_results.html') 
    c = Context({ 'query': query,}) 
    return HttpResponse(t.render(c)) 

"あなたが探し" と追加されていること"print"ステートメントは、ユーザーが検索バーに入力した内容を表示します。しかし、それは私のsearch_resultsページで生成されていません。

これにはどのような理由がありますか?

編集:

追加urls.pyあなたがGETパラメータを表示することを強制されているvalue='{{ request.GET.usr_query }}'

value="{{ query }}"

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^about/$', views.about, name='about'), 
    url(r'^contact/$', views.contact, name='contact'), 
    url(r'^search_engine/$', views.statement_search_engine, name='statement-search') # <- url for searchbox.html, 
    url(r'^test_search_results/$', views.search, name='test-search'), # <- url for searchresults. 
    url(r'^(?P<statement_id>.+)/$', views.statement_page, name='statement'), 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

答えて

0

短い答え:

がで滑って、このように思えるが:

c = Context({ 'query': query,})

これはviews.pyです。 Context()はエラーメッセージを発生させませんが...必要な機能を得るためには、この関数を削除してc変数を正規の辞書にするしかありませんでした。

私はこのためにstackoverflowの質問のWriting a very basic search form in Django

+0

私はContext()関数を自分で使用しませんでしたが、それを調べて、正しく使用しているようでした。しかし、 '{{request.GET.usr_query}}'を '{{query}} 'に変更していないと、まだ動作していないことに注意してください。 – manassehkatz

0

変更。これは最初のページの読み込み(通常はGET)で動作しますが、その時点で検索は行われていません。あなたはPOST(私の意見では適切だが、議論の余地がある)を提出する。検索関数はPOSTパラメーターを使用し、コンテキスト内でqueryという正しい値を返します。しかし、usr_queryのGET値を表示します。これは、ページがPOSTされたページになっているため、この時点では存在しません。 value=を変更しても問題ありません。

+0

は基本的に方法について反対するコンテキスト機能が含まれています。 POST要求は、サーバー上のデータを変更する操作用です。 GETは、データの特定のサブセットを要求することに関する検索に使用する正しい方法です。さらに、GETをブックマークすることもできます。 –

+0

私は実際にGETとPOSTを理解していないので、説明してくれてありがとう。これは継承されたプロジェクトです。私はできるだけ同じものを保っています。 残念ながら、value属性を指定したものに変更しても機能しませんでした。 search_resultsページには何も表示されません。私は{{usr_query}}に変更しようとしましたが...それはうまくいきませんでした。 –

+0

@DanielRoseman私が言ったように、それは議論の余地があります。しかし、どんなやり方でも、コード、コンテキスト、テンプレートをすべて一致させる必要があります。 – manassehkatz