Python 如何在Django中描述URL-仍然需要答案

Python 如何在Django中描述URL-仍然需要答案,python,django,forms,url,get,Python,Django,Forms,Url,Get,我正在尝试进行简单的搜索,并以分页的形式返回结果。每当我试图转到第二页时,我的搜索词就会丢失,因此我的第二页没有结果 我已经在Djangoproject教程中找到并遵循了这个示例,但是我还没有找到一个关于如何为搜索视图编写URL的示例 我以前在表单中使用过POST方法,因为当时我几乎没有数据可显示(尽管现在,经过一点研究,我知道GET和POST之间的用法差异)。当我获得更多的数据时,我不得不使用分页。因此,我将表单方法更改为GET,但我的问题是,我不知道如何描述我的URL,因此数据被发送到正确的

我正在尝试进行简单的搜索,并以分页的形式返回结果。每当我试图转到第二页时,我的搜索词就会丢失,因此我的第二页没有结果

我已经在Djangoproject教程中找到并遵循了这个示例,但是我还没有找到一个关于如何为搜索视图编写URL的示例

我以前在表单中使用过
POST
方法,因为当时我几乎没有数据可显示(尽管现在,经过一点研究,我知道
GET
POST
之间的用法差异)。当我获得更多的数据时,我不得不使用分页。因此,我将表单方法更改为
GET
,但我的问题是,我不知道如何描述我的
URL
,因此数据被发送到正确的视图

我曾尝试使用
POST
,但没有成功。最后,我决定坚持使用
GET
示例,但无意中发现了这个让我望而却步的URL

以下是模板和URL文件中的代码:

search.py:

我已经尝试了多种形式的
URL
,但都没有成功

i、 e:

url(r'^search/(?p\d+)/$,'ps.views.search',name=“search”)
url(r'^search/,'ps.views.search',name=“search”)
url(r'^search/(?P\d+)/(?P\w*),'ps.views.search',name=“search”)

任何解释/解决方案都将不胜感激。提前谢谢你

更新:

更新#2:

如果我使用
pdb
,我可以看到没有数据从客户端传递到服务器。我已经开始努力了,但是,任何信息和/或提示都将非常感谢,因为它们可以缩短我的搜索时间:)

(Pdb)请求。获取


你所说的“描述”你的url是什么意思?你的url.py看起来不错。您是否将调试器放入
ps.views.search()
函数以验证它是否正在运行?您是否查看了调试服务器日志以确保从浏览器请求了正确的url

您可以使用
r'^search/$”
并以
请求的形式访问页面参数。获取['page']
,或者您可以将参数传递到视图函数,如
url(r'^search/(?p\d+)/$
,这意味着搜索需要2个参数请求,然后是页面。如果传递页面参数,则需要将表单url更改为

<form method="GET" id="searchForm" action="/search/1">

而不是让page成为GET参数

我看不出您列出的任何URL的语法有任何错误

如果使用的是
url(r'^search/(?p\d+)/$”
,请确保search将名为page的变量作为第二个参数。了解如何使用调试器也很重要


导入pdb;pdb.set_trace()
(或者更好的ipdb!),将其放到视图中,查看其是否命中,如果未命中,请检查开发服务器以查看实际请求的url。

如果表单的方法是
GET
,则无法将查询字符串附加到操作,因为浏览器将覆盖它。只有当表单方法是
POST
时,才能执行此操作

将您的表单更改为:

<form method="GET" id="searchForm" action="/search/">
    <input type="text" id="billSearched" name="q_word">
    <input type="submit" value="{% trans "Look for" %}">
</form>
results.html
中:

{% for bill in results %}
     # .. display bill stuff
{% endfor %}

{% if results.has_previous %}
     <a href="{% url search %}?page={{ results.previous_page_number }}&q_word={{ term }}">previous</a>
{% endif %}

{% if results.has_next %}
      <a href="{% url search %}?page={{ result.next_page_number }}&q_word={{ term }}">next</a>
{% endif %}
{%用于结果中的账单%}
#…显示账单内容
{%endfor%}
{%if results.has_previous%}
{%endif%}
{%if results.has_next%}
{%endif%}

当我说descripe时,我的意思是我的
URL
应该是什么样子?
URL(r'^search/(这里还有什么?),'ps.views.search')
谢谢你的提示。我会尝试一下。@reos,你可以使用
r'^search/$”
并访问
页面
参数作为
请求。获取['page']
或者您可以将参数传递给查看函数,如
url(r'^search/(?P\d+)/$
这意味着搜索将使用两个参数
request
,然后使用
page
。我没有发现您列出的任何VEEW的语法有任何错误。我添加了
search.py
,以防止其他问题的发生。显然,我选择了简单视图,并尝试使用
requee访问数据st.GET['q_word'],但我在
pdb`output
(pdb)请求中得到了它。GET['q_word']***多值dictKeyError:“在”
中找不到键'q_word',您可以删除“{%csrf\u token%”现在。它仅用于POST请求。相关:很抱歉,它不起作用。它说
局部变量“searchTerm”在赋值之前引用了
。如果我添加一个简单的else语句并声明变量
searchTerm
,那么
页面的
值会出现错误,并表示它是
非eType
。我猜变量没有在HTTP请求中发送,但是为什么呢?代码似乎没有问题。我使用了
pdb
来查看HTTP请求的外观,而GET字典是空的。我不知道变量去了哪里。这是因为您的逻辑没有考虑用户提交空表单的时间-我只是更新了代码中与分页有关的部分。但是为什么GET请求中没有发送数据?我知道我视图中的逻辑“失败”,但那是因为没有发送数据。有什么想法吗?我刚刚结束了另一篇文章,提出了一个关于此问题的问题。
<form method="GET" id="searchForm" action="/search/1">
<form method="GET" id="searchForm" action="/search/">
    <input type="text" id="billSearched" name="q_word">
    <input type="submit" value="{% trans "Look for" %}">
</form>
from django.shortcuts import render

def search(request):
    if 'q_word' in request:
        searchTerm = request.GET['q_word']

    found_bills = Bill.objects.filter(name__icontains = searchTerm)
    page = request.GET.get('page')
    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) - not needed
    return render(request,
                  'results.html',{"results":current_page,"term": searchTerm})
{% for bill in results %}
     # .. display bill stuff
{% endfor %}

{% if results.has_previous %}
     <a href="{% url search %}?page={{ results.previous_page_number }}&q_word={{ term }}">previous</a>
{% endif %}

{% if results.has_next %}
      <a href="{% url search %}?page={{ result.next_page_number }}&q_word={{ term }}">next</a>
{% endif %}