【问题标题】:Idiomatically Handling form.errors In Django在 Django 中惯用地处理 form.errors
【发布时间】:2014-10-20 23:56:09
【问题描述】:

我刚从 Django 开始,现在我正在验证表单输入。我有一些基本上看起来像这样的代码:

if request.method == 'POST':
    form = RepairerForm(request.POST)
    if form.is_valid():

        ...
    else:
        return HttpResponse(form.errors)

为了触发 else 子句,我在 EmailField 字段中输入了一个无效的电子邮件地址。

我的问题是我不知道告诉用户他们输入无效的“正确”方式。 form.errors 是一本字典,所以我想我可以将其转换为格式良好的列表,然后在我的模板中进行处理,但这听起来很笨拙。此外,我还没有找到任何教程能够真正告诉你如何处理form.errors。他们都或多或少地假装它不存在。

我可以花一些时间尝试推出自己的解决方案,但我从 Django 中了解到,几乎所有东西都有一个不错、干净的解决方案。这次我错了,还是应该将我的错误转换为字符串列表并在我的模板中循环?

【问题讨论】:

    标签: django


    【解决方案1】:

    我不知道您为什么说没有文档说明如何处理表单错误。标准的form overview docs 向您展示了该做什么。

    关键是,仅仅显示错误信息是没有用的;您应该重新显示包含错误消息和用户输入数据的表单,以便用户可以更正他们需要的内容,然后重新提交。

    如果您只显示{{ form.as_p }} 的表单,每个字段将自动显示其错误;否则,您可以使用{{ form.my_field.errors }} 单独显示每一个,或者使用{{ form.errors }} 一次性显示。同样,这在同一 documentation page 上得到了完整的解释。

    【讨论】:

    • 谢谢!与我正在使用的 1.4 文档相比,1.7 文档在这个主题上似乎有更多的内容。这绝对使它更清楚。我的问题不是我没有阅读该文档,而是他们似乎没有在表单处理程序方法中没有通过“is_valid”测试的 POST 请求路径。该路径在 1.4 文档和我找到的所有其他教程中都被忽略了。现在我只是再次重定向到调用页面并传递表单对象,你是对的,这确实有效。再次感谢!
    • 关键是当 is_valid 为 False 时,它​​只是落入最后的渲染,重新显示带有无效表单对象的模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多