您必须使用 render_to_string 而不是 render_to_response 来渲染表单 HTML 代码,以便转义并将其设置为 unicode 字符串
我曾经使用 BeautifulSoup HTML、XHTML 和 XML 解析器来获得准确的 HTML 代码,如下所示:
if form.is_valid():
form.save()
html = render_to_string("template.html",
{'form':form},context_instance=RequestContext(request))
soup = BeautifulSoup(html)
html_form = soup.findAll('form')
json = simplejson.dumps({'status':True,
'html':unicode(html_form[0]),
'umessage':js_translators.NotifyMessage.data_saved}, ensure_ascii=False)
return HttpResponse(json, mimetype="application/json")
else:
html = render_to_string("template.html",
{'form':form},context_instance=RequestContext(request))
soup = BeautifulSoup(html)
html_form = soup.findAll('form')
json = simplejson.dumps({'status':False,
'html':unicode(html_form[0]),
'umessage':js_translators.NotifyMessage.data_wrong}, ensure_ascii=False)
return HttpResponse(json, mimetype="application/json")
所以,在客户端,我只是使用 jQuery 和 Ajax 获得响应,并使用以下代码重写表单代码:
$('#myform').html(response.html);
有了这个,我用 ajax 的 django 表单验证解决了这个问题