我想创建一个“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文件可能还有问题......
谢谢!
答案 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
中