1

我正在尝试创建一个用于更新联系人元素的表单。我想链接回 URL 的表单操作,但 URL 基于contact_id。当我尝试将 contact_id 变量添加到表单操作中时,我的 CSRF 令牌正在转义它,因此它不会将其作为变量读取。有没有办法绕过这个,还是我以错误的方式接近这个?

视图.py

def contactedit(request, contact_id=1):
    if request.POST:
        contact = Contact.objects.get(id=contact_id)
        form = ContactForm(request.POST, instance=contact)
        if form.is_valid():
            form.save()

        return HttpResponseRedirect('/contact/{{ contact_id }}/')

    else:
        contact = Contact.objects.get(id=contact_id)
        form = ContactForm(instance=contact)

    args = {}
    args.update(csrf(request))

    args['form'] = form
    args['contact_id'] = contact_id

    return render_to_response('contactedit.html', args)

联系编辑.html

<form action="/contact/{{ contact_id }}/edit/" method="post">{% csrf_token %}


找不到错误页面 (404) 请求方法:GET 请求 URL:(ipaddress)/contact/%7B%7B%20contact_id%20%7D%7D/

4

1 回答 1

2

你的代码失败了

return HttpResponseRedirect('/contact/{{ contact_id }}/')

您正在尝试在这里使用模板语法,而不是您应该这样做

return HttpResponseRedirect('/contact/'+str(contact_id))

除此之外,当表单无效时,您的代码将不会处理大小写,并将调用相同的代码。当表单无效时,您可能希望再次显示错误的表单。请参阅 django 的表单处理文档。

于 2013-11-08T09:29:37.267 回答