我正在学习Django并努力学习它。当我从模板发布数据时,我不完全理解发生了什么。我有一个模型类Person,它定义了表中的字段。我正在使用表单来显示有关某人的信息,我可以查看某个人的信息,但我无法保存相同的信息。当我单击提交时,我找不到错误页面。我不明白为什么人们会在网址中附加两次。这有点让人困惑。我希望有人可以帮助我理解我哪里出错了。 请求网址:http://devops:8000/cms/person/person 这是我的代码:
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})
person.html
<form action="person" role="form" method="post">
{% bootstrap_form form %}
</form>
答案 0 :(得分:2)
表单中的action
不正确。当您使用person
时,这并不意味着它将使用person
视图,这意味着该表单将提交给相对网址person
。
您可以使用url
标记获取正确的网址:
<form action="{% url 'cms' id %}" role="form" method="post">
现在我将尝试解释网址中的双person/person
来自哪里:
如果您从/cms/person/
开始,则相对网址person
为/cms/person/person/
。如果您从/cms/person/1
开始,则相对网址person
也是/cms/person/person/
。由于您没有此网址模式,因此会出现404错误。
但是,如果您从/cms/person/1/
开始,则相对网址person
为/cms/person/1/person/
出于这个原因,您可能会发现在网址中使用尾部斜杠更容易,例如。
r'^workflowdetail/(?P<id>\d+)/$
如果您这样做,则根本不需要表单标记中的action
属性。
<form role="form" method="post">