我正在尝试创建一个用于更新联系人元素的表单。我希望链接回URL的表单操作,但URL基于contact_id。当我尝试将一个contact_id变量添加到表单操作中时,我的CSRF令牌正在转义它,因此它不会将其作为变量读取。有没有办法绕过这个或者我是以错误的方式接近这个?
views.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)
contactedit.html
<form action="/contact/{{ contact_id }}/edit/" method="post">{% csrf_token %}
错误的
找不到页(404)
请求方法:GET
请求网址:(ipaddress)/联系人/%7B%7B%20contact_id%20%7D%7D /
答案 0 :(得分:2)
您的代码失败
return HttpResponseRedirect('/contact/{{ contact_id }}/')
您正在尝试使用模板语法,而不应该使用
return HttpResponseRedirect('/contact/'+str(contact_id))
除了表单无法处理表单无效并将调用相同代码的情况。当表单无效时,您可能希望再次显示表单并出现错误。请参阅django的表格处理文档。