簡単な検索を行い、ページ分割された形式で結果を返そうとしています。2 番目のページに移動しようとすると、検索用語が失われ、2 番目のページに結果がありません。
Djangoproject チュートリアルのページネーションの例を見つけて従いましたが、検索ビューの URL を記述する方法の例は見つかりませんでした。
以前は、表示するデータがほとんどなかったときにフォームで methodを使用していました (ただし、少し調査した結果、とPOST
の使用法の違いがわかりました)。さらに多くのデータを取得すると、ページネーションを使用するように制限されました。したがって、フォームメソッドをに変更しましたが、ここに問題があります。データを説明する方法がわからないため、データは正しいビューに送信されます。GET
POST
GET
URL
私はそれを機能させようとしましPOST
たが、成功しませんでした。最後に、GET
例に固執することにしましたが、この URL に出くわし、それが私を遠ざけています。
テンプレートと URL ファイルのコードは次のとおりです。
検索.py:
<form method="GET" id="searchForm" action="/search/?page=1">
{% csrf_token %}
<input type="text" id="billSearched" name="q_word">
<input type="submit" value="{% trans "Look for" %}">
</form>
urls.py:
urlpatterns = patterns('',
url(r'^$','ps.views.bills',name="bills"),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^search/$','ps.views.search',name="search"),)
のために多くのフォームを試しましたURL
が、成功したものはありません。
すなわち:
url(r'^search/(?P<page>\d+)/$','ps.views.search',name="search")
url(r'^search/','ps.views.search',name="search")
url(r'^search/(?P<page>\d+)/(?P<searchTerm>\w*)','ps.views.search',name="search")
説明/解決策をいただければ幸いです。前もって感謝します!
アップデート:
def search(request):
searchTerm = ""
page = 1
import pdb
pdb.set_trace()
if 'q_word' in request:
searchTerm = request.GET['q_word']
if 'page' in request:
page = request.GET['page']
found_bills = Bill.objects.filter(name__icontains = searchTerm)
paginator = Paginator(found_bills,25)
try:
current_page = paginator.page(page)
except PageNotAnInteger:
current_page = paginator.page(1)
except (EmptyPage, InvalidPage):
current_page = paginator.page(paginator.num_pages)
bills_list = list(current_page.object_list)
return render_to_response('results.html',{"bills_list":bills_list,"current_page":current_page,},context_instance=RequestContext(request))
更新#2:
使用するpdb
と、クライアントからサーバーに渡されるデータがないことがわかります。それに取り組む必要がありますが、それでも、検索時間を短縮できるため、情報やヒントは本当にありがたいです:)
(Pdb) request.GET
<QueryDict: {u'page': [u'1']}>