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">
我以前试过,我得到这个错误。 NoReverseMatch:未找到参数'(u'2',)'和关键字参数'{}'的'workflow'。尝试了0个模式:[] – hermy67
你必须尝试一些稍微不同的东西 - 我的代码不会导致包含'工作流程'的错误。请注意,我使用''cms''是因为在url模式中有'name ='cms''。 – Alasdair
这是我做的复制错误。你的解决方案是正确的,并工作我无法使用原始代码并尝试对其进行编辑。但你的解决方案是完美的。我使用了错误的名称而不是cms,现在它可以工作。 – hermy67