我試圖做一個簡單的搜索並返回分頁形式的結果。每當我嘗試去第二頁時,我的搜索詞都會丟失,因此我的第二頁沒有結果。如何在Django中描述URL - 仍然需要一個答案
我發現並遵循Djangoproject教程中的Pagination示例,但是我還沒有找到關於如何爲搜索視圖編寫我的URL的示例。我已經在我的表單中使用過POST
方法,因爲當我只有很少的數據可以顯示時(雖然現在經過一些研究,我知道GET
和POST
之間的使用差異)。當我獲得更多數據時,我被限制使用分頁。因此,我已將表單方法更改爲GET
,但這是我的問題,我不知道如何描述我的URL
,以便將數據發送到正確的視圖。
我試圖使它與POST
一起工作,但沒有成功。最後我決定堅持使用GET
的例子,但是偶然發現了這個讓我失望的URL。
這裏是模板代碼和文件的URL:
search.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")
任何解釋/解決方案將非常感激。先謝謝你!
UPDATE:
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']}>
您可以刪除 「{%csrf_token%}」 了。它僅用於POST請求。 – rantanplan
感謝提示:) –
相關:http://stackoverflow.com/a/1116026/781695 – Medorator