django - 当视图需要参数时,表单动作参数是什么?

时间:2011-03-29 02:22:18

标签: django django-templates django-forms django-views

这就是我所拥有的:

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)并单击提交按钮时,我看到绝对没有从该表单传递的字段值。这几乎就像我点击提交按钮时传递一个空表格。有任何想法吗?谢谢!

4 个答案:

答案 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,这在大多数情况下都有效。