如何将表单输入传递给Django中的表单操作?我尝试了这个,但它不能正常工作
<form action="/search?search_term=q" method="get">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
答案 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_item1
和serach_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
是一个函数,你需要编写来进行实际搜索。