表单 - 动作属性

时间:2014-02-21 06:15:43

标签: python django

我想创建一个“index.html”Django模板,其中包含一个按钮。按下按钮时,我想渲染模板“home.html”,它本身显示值“123”。 (当然,有一种更简单的方法可以完成这项特定的任务 - 但我正在学习Django,所以想以这种方式尝试。)

这是我的views.py文件:

from django.shortcuts import render

def home(request, x)
    context = {'x': x}
    return render(request, 'home.html', context)

这是我的urls.py文件:

from django.conf.urls import patterns, include, url

from myapp import views

urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^home', views.home, name='home'),
)

这是我的home.html文件:

<html>
<body>
The value is: {{ x }}
</body>
</html>

最后,这是我的index.html文件:

<html>
<form method="post" action=???>
<input type="button" value="Click Me">
</form>

请问有人可以告诉我在上面的action属性中代替???需要写什么?我试过设置??? =“{%url'home'123%}”但这会给我一个“NoReverseMatch”错误。因此,我怀疑我的urls.py文件可能还有问题......

谢谢!

2 个答案:

答案 0 :(得分:2)

像这样重写你的index.html

<html>
<form method="post" action=/home>
<input type="hidden" name="my_value" value="123">
<input type="button" value="Click Me">
</form>

它包含一个名为my_value的隐藏变量,它保存您的值123。我的view.py接受这个值,

from django.shortcuts import render

def home(request)
    x = ' '
    if request.POST:
        x = request.POST['my_value']
    context = {'x': x}
    return render(request, 'home.html', context)

答案 1 :(得分:0)

您收到NoReverseMatch错误,因为您没有捕获与该网址一起发送的123的网址。让我告诉你一个简单的方法:

您可以将操作设置为:

action="/home/123" # or any integer you wish to send.

通过将主网址修改为:

,在网址py中匹配该网址
url(r'^home/(?P<x>\d+)/$', views.home, name='home')

这会将您在主网址中发送的任何参数(在本例中应为整数)传递为x。因此x将显示在home.html