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

您正在发布到同样的视图,也服务于表单。所以起初,这个观点被称为并服务于这个形式。当您发布表单时,会调用相同的视图,但这次是处理表单。这就是为什么这个动作是空的。

+0

我会看看这个。说得通。感谢您的答复。 – avatar 2011-03-30 15:37:28

+0

如果是这种情况,我应该怎么做才能避免它? – avatar 2011-03-30 18:24:57

+3

摆脱行动中的点=“。”。然后表单将被发布到相同的视图并进行处理。你想避免什么?如果您想发布到其他视图,则可以将该路径放在行动中而不是将其留空 – 2011-03-30 18:28:50

它不应该需要任何东西。假设你在以下网址:

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() 
+2

如果action属性为空,则某些浏览器(例如,最近的Chrome构建版)将无法发布。 – shacker 2013-12-22 00:05:03

+0

@shacker也许'action =“。”'足以解决chrome问题? – Paolo 2014-03-02 00:06:00

如果你要明确设置的动作,假设你在你的模板具有可变用户名

<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,这在大多数情况下都可以使用。