为什么django form.errors显示为字符串?

时间:2012-08-01 05:51:26

标签: django django-forms

我正在使用django表单。我将表单错误传递给模板as,

return render_to_response(template_name, {'form':form})

在模板中,我需要将其转换为js字典,所以我使用了

eval({{form.errors|safe}})

但无论我在模板中使用form.errors,我都会得到html格式而不是字典。为什么django表单显示为字符串而不是字典。有没有办法使用form.errors的字典版本。

2 个答案:

答案 0 :(得分:3)

它显示为无序列表,因为error collection's ErrorDict.__unicode__  method返回ErrorDict.as_ul

的值

如果要返回字典的默认字符串表示形式,请将其强制转换为字典:dict(form.errors)。现在,您将不再获得HTML格式的无序列表。

更新

如果您尝试在JS中表示Python字典,那么请保持简单并将字典对象编码为JSON。所以在你看来的某个地方:

from django.utils import simplejson

errors = simplejson.dumps(form.errors)

答案 1 :(得分:0)

查看django的源代码,错误的类型应为django.forms.util.ErrorDict。

对于您的案例,有以下两种方法可能会有趣:as_text和as_ul。

我看不出你如何在django模板中使用eval方法。据我所知,甚至没有一个有效的标准django模板标签。

我认为你应该手动遍历dict并相应地打印/生成javascript对象文字。