我正在尝试进行简单的搜索并以分页的形式返回结果。每当我尝试转到第二页时,我的搜索词就会丢失,因此我的第二页没有结果。
我在 Djangoproject 教程中找到并遵循了分页示例,但我还没有找到有关如何为搜索视图编写 URL 的示例。
我以前在我的表单中使用过方法,因为当我几乎没有数据要显示时(尽管现在,经过一些研究,我知道和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>
网址.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
但没有一个成功。
IE:
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']}>