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

ava*_*tar 30 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))
Run Code Online (Sandbox Code Playgroud)

user得到通过URL通过.

urls.py:

...

urlpatterns += patterns('myview.views',
    (r'^(?P<user>\w+)/', 'myview'),
)

...
Run Code Online (Sandbox Code Playgroud)

我也有template.html一个表格:

<form name="form" method="post" action=".">
...
</form>
Run Code Online (Sandbox Code Playgroud)

如果myview函数需要参数,那么表单动作参数会怎样?

现在我有action=".".我问的原因是因为当我填写表单In(templates.html)并单击提交按钮时,我看到绝对没有从该表单传递的字段值.这几乎就像我点击提交按钮时传递一个空表格.有任何想法吗?谢谢!

gla*_*xly 33

如果要显式设置操作,假设模板中有可变用户名,

<form name="form" method="post" action="{% url myview.views username %}">
Run Code Online (Sandbox Code Playgroud)

或者您可以在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 %}">
Run Code Online (Sandbox Code Playgroud)


Tim*_*ony 25

您将发布到也为表单提供服务的同一视图.因此,首先,视图被调用并提供表单.发布表单时,会调用相同的视图,但这次是处理表单.这就是为什么行动是空的.

  • 摆脱行动中的点=".".然后表单将发布到同一视图并进行处理.你想避免什么?如果要发布到其他视图,可以将路径置于操作中而不是将其留空 (3认同)

Thi*_*Lam 6

它不应该要求任何东西.假设您在以下网址:

www.yoursite.com/users/johnsmith/
Run Code Online (Sandbox Code Playgroud)

你的表格应该是:

<form name="form" method="post" action="">
Run Code Online (Sandbox Code Playgroud)

此时,您已经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()
Run Code Online (Sandbox Code Playgroud)

  • 如果action属性为空,则某些浏览器(例如最近的Chrome版本)将无法发布. (2认同)