关于django form.errors的问题,如何获取原始错误信息

2 投票
1 回答
715 浏览
提问于 2025-04-18 04:59

Django文档上说,

可以通过访问错误属性来获取错误信息的字典:

f.errors {'sender': ['请输入一个有效的电子邮件地址。'], 'subject': ['这个字段是必填的。']}

但是,当我尝试打印 forms.errors 时,却得到了 HTML 代码。

def login(request):
    if request.method == "GET":
        return render(request, r"login.html")
    else:
        form = LoginForm(request.POST)
        if form.is_valid():
            return HttpResponse("valid")
        else:
            print form.errors
            return HttpResponse("Invalid")

Django version 1.6.4, using settings 'test_proj.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

<ul class="errorlist"><li>username<ul class="errorlist"><li>Ensure this value ha
s at most 3 characters (it has 6).</li></ul></li></ul>

我需要获取原始的错误信息,以便显示在 AJAX 消息中,比如说:

response_json = {"status": "error", "content": "Username is too short"}

如果还有其他方法可以获取原始错误信息,请告诉我。谢谢!

1 个回答

4

这其实是因为调用了 print 这个函数:它会自动把内容转换成字符串,而错误列表类的 __str__ 方法 会调用它的 as_ul 方法来输出成 HTML 格式——这样你就可以在模板中简单地用 {{ form.errors }} 来显示错误列表。

不过,实际上这个对象的内容并不是 HTML 格式的,你可以通过执行 print repr(form.errors) 来查看它的真实内容。

撰写回答