django post方法在url中传递参数后不工作

问题描述:

我正在学习Django并学习它。我不完全了解当我从模板发布数据时发生了什么。我有一个模型类Person定义表中的字段。我正在使用表单显示有关某人的信息,并且我可以查看某个人的信息,但我无法保存相同的信息。当我点击提交时,我得到错误页面未找到。我不明白为什么人会在url中追加两次。这有点令人困惑。我希望有人能帮助我理解我的错在哪里。 请求URL:http://devops:8000/cms/person/person 这里是我的代码:django post方法在url中传递参数后不工作

forms.py:

class PersonView(ModelForm): 
    class Meta: 
     model = Person 
     fields = ['FirstName','LastName','Address'] 

urls.py:

urlpatterns = patterns('cms', 
    url(r'^workflowdetail/(?P<id>\d+)$', 'views.person',name='cms'), 
) 

views.py:

def person(request, id): 
    person= get_object_or_404(Person, pk=id) 
    if request.method == 'GET': 
     form = Person(instance=person) 
    else: 
     form = Person(request.POST,instance=person) 
     if form.is_valid(): 
      form.save() 
    return render(request, 'person.html', {'form': form, 'id': id}) 

人。 html

<form action="person" role="form" method="post"> 
    {% bootstrap_form form %} 
</form> 

您的action的表单不正确。当您使用person时,这并不意味着它会使用person视图,这意味着表单将被提交到相对网址person

您可以使用url标签,以获得正确的网址:

<form action="{% url 'cms' id %}" role="form" method="post"> 

现在,我会尽力解释,其中在URL中的双person/person来自:

如果你在开始,说,/cms/person/,那么相关的网址person就是/cms/person/person/。如果您从/cms/person/1开始,那么相关网址person也是/cms/person/person/。由于您没有此模式的网址格式,因此会出现404错误。

但是,如果你开始在/cms/person/1/,那么相对URL person/cms/person/1/person/

出于这个原因,你可能会发现很容易在你的网址,例如使用斜线

r'^workflowdetail/(?P<id>\d+)/$ 

如果你这样做,你实际上并不需要在你的表单标签action属性都没有。

<form role="form" method="post"> 
+0

我以前试过,我得到这个错误。 NoReverseMatch:未找到参数'(u'2',)'和关键字参数'{}'的'workflow'。尝试了0个模式:[] – hermy67

+1

你必须尝试一些稍微不同的东西 - 我的代码不会导致包含'工作流程'的错误。请注意,我使用''cms''是因为在url模式中有'name ='cms''。 – Alasdair

+1

这是我做的复制错误。你的解决方案是正确的,并工作我无法使用原始代码并尝试对其进行编辑。但你的解决方案是完美的。我使用了错误的名称而不是cms,现在它可以工作。 – hermy67