Django形成输入和动作链接

时间:2017-02-08 01:25:00

标签: python django django-forms

如何将表单输入传递给Django中的表单操作?我尝试了这个,但它不能正常工作

<form action="/search?search_term=q" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
</form>

4 个答案:

答案 0 :(得分:1)

GET中指定方法form时,您无需在网址中明确附加参数。当用户提交表单时,您的参数将自动作为key-value对附加到网址中。

示例

  <form action="search" method="GET">
        <input type="text" name="search_item1">
        <input type="text" name="search_item2">
        <input type="submit" value="Search">
   </form>

当用户点击提交按钮时,您的参数(serach_item1serach_item2)将隐式添加到操作网址中。其中键是输入字段名称属性 现在您的网址看起来像

www.example.com/search?search_item1=<serach1>&search_item2=<serach2>

答案 1 :(得分:0)

要将GET参数传递到页面,您不需要在action属性中指定它。

请关注:

<form method="GET" action="search/">
    <input type="text" name="search_term" value="{{ request.GET.search_term }}">
    <input type="submit" value="Search">
</form>

这会将您重定向到页面http://yourdomain.com/search?search_term=search_text

请注意我替换了输入name属性以将GET参数重命名为search_term。我还添加了value属性以将当前搜索文本显示到输入字段。

答案 2 :(得分:0)

shuboy2014和neverwalkaloner是正确的。但他们没有告诉你的一个事实是,如果你在那些字段中没有声明值,那么你将传递空值。例如:

<form method="GET" action="search/">
  <input type="text" name="search_term">
  <input type="submit" value="Search">
</form>

这会创建一个像http://yourdomain.com/search?search_term=这样的网址,这可能会在稍后的视图中导致意外错误。您应该执行request.GET.get("search_term")以避免例外或修改表单的submit函数以动态删除这些空字段的名称。

答案 3 :(得分:0)

我假设您正在询问如何将HTML表单链接到视图函数进行处理。请注意,在Django中,我们不会将它们称为动作。

以下是您放入Django模板的搜索结果的基本表单和占位符:

<form action="/search" method="get">
  <input type="text" name="q">
  <input type="submit" value="Search">
</form>

{% if search_results %}
   Display search results here.
{% endif %}

如果您在文本字段中输入apple,然后点击此表单上的搜索按钮,它会向/search?q=apple发出GET请求。

您需要通过URLconf将请求路由到视图函数以进行处理。

URLconf中的条目可能如下所示:

from django.conf.urls import url

from app import views


urlpatterns = [
    # ...
    url(r'^search/$', views.search),
    # ...
]

views.search是执行处理的视图函数。这是一个可能的实现:

from django.shortcuts import render


def search(request):
    q = request.GET.get('q')

    if q is None:
        return render(request, 'app/search.html')

    search_results = perform_search(q)
    context = { 'search_results': search_results }

    return render(request, 'app/search.html', context)

perform_search是一个函数,你需要编写来进行实际搜索。