首页 文章

在url中传递参数后,django post方法无法正常工作

提问于
浏览
0

我正在学习Django并努力学习它 . 我不明白为什么人们会在网址中附加两次 . 这有点让人困惑 . 我希望有人可以帮助我理解我哪里出错了 . 请求网址: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>

1 回答

  • 2

    您表单中的 action 不正确 . 当您使用 person 时,这并不意味着它将使用 person 视图,这意味着该表单将提交给相对URL person .

    您可以使用 url 标记来获取正确的网址:

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

    现在我将尝试解释url中的双 person/person 来自哪里:

    如果你从 /cms/person/ 开始,则相对url person/cms/person/person/ . 如果从 /cms/person/1 开始,那么相对url 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">
    

相关问题