Skip to main content
 首页 » 编程设计

python之将 <input> 值传递给 Django View

2025年05月04日25thcjp

假设我有以下毫无意义的示例 View :

def foo(request, input): 
    return HttpResponse() 

在模板中我有一个表单:

<form method="get" action="{% url 'foo' ??? %}"> 
    <input id="myinput" type="text" name="myinput"> 
 
    ... 
 
</form> 

最后,我的 URLconf 中有以下 url:

urlpatterns = [ 
    url(r'^foo/(.+)/', views.foo, name='foo'), 
] 

我想做的是将用户输入的值传递到 ID 为 #myinput 的输入中,然后传递给 foo() View 函数。换句话说,您应该能够在 html 输入中输入 bar,当您提交表单时,它将带您到 foo/bar/。

我知道在 foo View 中我可以使用 request.GET['myinput'] 轻松访问输入的值,但我希望它也显示在 url 中。

这看起来应该是一个相当普遍的任务,但我还没有想出解决方案。任何建议,将不胜感激。我的 Frankenstein's Monster 第一个 Django 站点几乎完成了,这是我缺少的最后一 block 。

请您参考如下方法:

我误解的根源

尽管为了简化我的示例并避免使用特定于应用程序的代码,我没有明确说明这一点,但我的用例是一个简单的搜索 View 。该 View 实际上是我在 Django 之旅开始时写的第一个 View ,我错误地是 POST正在处理我的数据而不是 GET正在处理它。这样一来,如果我正在搜索项目 foo ,它将带我到 foo 的详细信息页面, 但 url 将是 mysite/search/ (即,搜索查询虽然包含在请求中,但未包含在 url 中),我无法通过访问 url mysite/search/ 返回这些搜索结果。 .

当我使用 GET 时在这个问题的玩具示例中请求,我没有意识到我一直在使用 POST在我的应用程序中,通过一些小的调整,我可以非常轻松地免费获得我想要的功能。我知道所有这些对于资深甚至中级 Web 开发人员来说都是非常明显的,但是对于没有 Web 或 CS 经验的从头开始的人来说,像 HTTP 这样的事情。可能有点困惑。至少对我来说是这样。非常感谢@Two-Bit Alchemist 以我能理解的方式解释了这一点。

将所有这些应用到我的玩具示例中

我会在我的 View 中删除传递的参数:

def foo(request): 
 
    # If I want to do something with the search query, I can access it with 
    # request.GET['search_query'] 
 
    return HttpResponse() 

将模板中的表单更改为:

<form method="get" action="{% url 'foo' %}"> 
    <input id="myinput" type="text" name="search_query"> 
 
    ... 
 
</form> 

并将我的网址更改为:

urlpatterns = [ 
    url(r'^foo/search/', views.foo, name='foo'), 
] 

正如@Two-Bit Alchemist 所说:“剩下的事情会像变魔术一样发生”。如果用户输入 bar在输入和提交表格时,他们将被带到foo/search/?search_query=bar .这就是我要找的。