django - 视图需要参数时进入窗体动作参数的内容?
问题描述:
这是我有:django - 视图需要参数时进入窗体动作参数的内容?
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)并单击提交按钮时,我完全没有看到从该表单传递的字段值。这几乎就像我点击提交按钮时传递一个空表单。有任何想法吗?谢谢!
答
您正在发布到同样的视图,也服务于表单。所以起初,这个观点被称为并服务于这个形式。当您发布表单时,会调用相同的视图,但这次是处理表单。这就是为什么这个动作是空的。
答
它不应该需要任何东西。假设你在以下网址:
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()
答
如果你要明确设置的动作,假设你在你的模板具有可变用户名,
<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 %}">
答
您可以使用request.path
,这在大多数情况下都可以使用。
我会看看这个。说得通。感谢您的答复。 – avatar 2011-03-30 15:37:28
如果是这种情况,我应该怎么做才能避免它? – avatar 2011-03-30 18:24:57
摆脱行动中的点=“。”。然后表单将被发布到相同的视图并进行处理。你想避免什么?如果您想发布到其他视图,则可以将该路径放在行动中而不是将其留空 – 2011-03-30 18:28:50