我试图做一个简单的搜索并返回分页形式的结果。每当我尝试去第二页时,我的搜索词都会丢失,因此我的第二页没有结果。如何在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