这就是我所拥有的:
myview.py
,其视图带有参数user
:
def myview(request, user):
form = MyForm(request.POST)
....
return render_to_response('template.html',locals(), context_instance=RequestContext(request))
user
通过网址传递。
urls.py
:
...
urlpatterns += patterns('myview.views',
(r'^(?P<user>\w+)/', 'myview'),
)
...
我还有template.html
表单:
<form name="form" method="post" action=".">
...
</form>
如果myview
函数需要参数,那么表单操作参数会怎样?
现在我有action="."
。我问的原因是因为当我填写表单In(templates.html)并单击提交按钮时,我看到绝对没有从该表单传递的字段值。这几乎就像我点击提交按钮时传递一个空表格。有任何想法吗?谢谢!
答案 0 :(得分:33)
如果您想明确设置操作,假设您的模板中有一个变量 username ,
<form name="form" method="post" action="{% url myview.views username %}">
或者您可以在urls.py中为网址指定名称,以便您可以像这样引用它:
# urls.py
urlpatterns += patterns('myview.views',
url(r'^(?P<user>\w+)/', 'myview', name='myurl'), # I can't think of a better name
)
# template.html
<form name="form" method="post" action="{% url myurl username %}">
答案 1 :(得分:23)
您要发布到也为该表单提供服务的同一视图。因此,首先,视图被调用并提供表单。发布表单时,会调用相同的视图,但这次是处理表单。这就是为什么行动是空的。
答案 2 :(得分:6)
它不需要任何东西。假设您在以下网址:
www.yoursite.com/users/johnsmith/
您的表格应该是:
<form name="form" method="post" action="">
此时,您已与myview
用户johnsmith
在一起。您的视图应如下所示:
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# you should be able to extract inputs from the form here
else:
form = MyForm()
答案 3 :(得分:3)
您可以使用request.path
,这在大多数情况下都有效。