【问题标题】:How to keep searched word on second results page如何在第二个结果页面上保留搜索词
【发布时间】:2012-05-08 01:50:34
【问题描述】:

我正在使用 Django 开发一个应用程序,我在一个非常大的数据库和一个分页器中进行了简单的搜索以获取结果。问题是当我尝试转到第二个结果页面时,我丢失了链接中的搜索词。

我尝试用 JQuery 重写输入字段中的搜索词,但没有成功。我尝试将值从服务器端重新发送到输入字段,也没有工作。

我怎样才能设法将它保留在结果的第二页?还有其他提示吗?

这是我的代码,至少是相关部分:

results.html:

...
<form method="POST" id="searchForm"  action="{% url ps.views.search page=1 searchTerm='__search_term__' %}">
    {% csrf_token %}
    <input type="text" id="billSearched">
    <input type="submit" value="{% trans "Look for" %}">
</form>
 ...
<div class="pagination">
    {% if current_page.has_previous %}
        <a href="{% url ps.views.search page=current_page.previous_page_number searchTerm='__search_term__' %}">previous</a>
    {% endif %}

    <span class="current">
        Page {{ current_page.number }} of {{ current_page.paginator.num_pages }}
    </span>

    {% if current_page.has_next %}
        <a href="{% url ps.views.search page=current_page.next_page_number searchTerm='__search_term__' %}">next</a>
    {% endif %}
</div>

search.py​​:

def search(request,page,searchTerm):
    found_bills = Bill.objects.filter(name__icontains=searchTerm)
    searchedWord = str(searchTerm)
    paginator = Paginator(found_bills,25)
    try:
        current_page = paginator.page(page)
    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,"searchTerm":searchTerm,"searchedWord":searchedWord},context_instance=RequestContext(request))

还有 urls.py 虽然我不确定它是否有用:)

urlpatterns = patterns('',
    url(r'^$','ps.views.bills',name="bills"),
    url(r'^i18n/', include('django.conf.urls.i18n')),
    url(r'^search/(?P<page>\d+)/(?P<searchTerm>\w*)','ps.views.search',name="search"),)


I should mention that in the address bar the searched term when I go to page 2 is "__search_term__".

http://127.0.0.1:8000/search/2/__search_term__

提前感谢您! :)

【问题讨论】:

    标签: jquery python django search pagination


    【解决方案1】:

    将表单方法更改为 GET 而不是 POST,然后使用搜索词构建链接作为 URL 查询字符串的一部分,如下所示...

    <a href="?page={{ contacts.previous_page_number }}">previous</a>
    

    https://docs.djangoproject.com/en/dev/topics/pagination/

    【讨论】:

    • 您能否举例说明如何为搜索词建立链接?恐怕我不明白..
    • 我使我的网址看起来像这样,因此它传递了搜索的单词和页面,但我无法让应用程序打印出结果。我猜他们在GET 数据中看不到“searchTerm”和“page”字段。
    • 一般来说,从服务器获取数据时使用 GET,向服务器发送数据时使用 POST。 stackoverflow.com/questions/46585/…我注意到您接受了答案,您现在是否可以正常工作?
    • 是的,我有。我理解这两种方法之间的区别。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多