django 表单错误消息未显示

Posted

技术标签:

【中文标题】django 表单错误消息未显示【英文标题】:django form error messages not showing 【发布时间】:2013-09-27 14:40:12 【问题描述】:

所以我有我的看法:

def home_page(request):
    form = UsersForm()
    if request.method == "POST":
        form = UsersForm(request.POST)

        if form.is_valid():
            form.save()
    c = 
    c.update(csrf(request))
    c.update('form':form)
    return render_to_response('home_page.html', c)

我的表单.py:

class UsersForm(forms.ModelForm):

    class Meta:
        model = Users
        widgets = 'password':forms.PasswordInput()

    def __init__(self, *args, **kwargs):
        super( UsersForm, self ).__init__(*args, **kwargs)
        self.fields[ 'first_name' ].widget.attrs[ 'placeholder' ]="First Name"  
        self.fields[ 'last_name' ].widget.attrs[ 'placeholder' ]="Last Name"
        self.fields[ 'password' ].widget.attrs[ 'placeholder' ]="Password"

还有我的模板:

<html>
    <body>

    <form method="post" action="">% csrf_token %
         form.first_name  form.last_name  <br>
         form.password  <br>
        <input type="submit" value="Submit Form"/>
    </form>

    % if form.errors %
        % for field in form %
        % for error in field.errors %
            <p>  errors  </p>
        % endfor %
        % endfor %
        % for error in form.non_field_errors %
        <p>  error  </p>
        % endfor %
    % endif %

    </body>
</html>

现在,请记住,在我拆分表单字段之前,我的表单看起来像这样:

    <form method="post" action="">% csrf_token %
             form 
        <input type="submit" value="Submit Form"/>
    </form>

如果表单有问题(例如缺少某个字段),它会自动给出错误消息。在我拆分模板中的表单字段(使 form.first_name 、 form.last_name 和 form.password 成为它们自己的部分)后,它停止自动提供错误消息。这是正常的吗?

但主要问题是,如果有错误消息,我的 if form.errors 语句为什么不起作用/显示错误消息?例如,如果我故意不填写表单中的字段并单击提交,则数据库不会获得更新(这是一件好事),但不会给出任何错误消息。知道为什么吗?

我还尝试删除 forms.non_field_errors 并尝试仅返回字段错误,如下所示:

    % if form.errors %
        % for field in form %
        % for error in field.errors %
            <p>  errors  </p>
        % endfor %
        % endfor %
    % endif %

但还是不行。

【问题讨论】:

你能修复视图方法中的缩进并准确显示视图代码的外观吗? 哎呀,好了,刚刚修好了。 同时检查内部 form.non_field_errors 。把它放在% if form.errors % 外面。 Example. 嗯好吧,我完全删除了 forms.non_field_errors ,但它仍然无法正常工作。我更新了帖子并展示了我的尝试。 @user2719875 删除它不是我的意思,但很高兴看到它已解决。不过,放回非字段错误。将其放回 if 块之外。可能会派上用场。 【参考方案1】:

像这样在views.py中添加这个sn-ps

if request.method == "POST":
    fm = UserRegsitrationForm(request.POST)
    if fm.is_valid():
        fm.save()

    else:
        fm = UserRegsitrationForm()
    context = 'fm':fm
    return render(request,'registration.html',context)

【讨论】:

请解释你的代码是做什么的以及它是怎么做的。 如果您的表单是有效的,它只会保存表单,否则它将转到 else 部分并返回错误的表单。【参考方案2】:

错误捕获很可能通过以下方式完成:

% for field in form %
     field.errors 
% endfor %

【讨论】:

【参考方案3】:

如果 is_valid() 不正确,您必须再次发送表单上下文,

    if form.is_valid():

        return redirect('/user/contact/')
    else:
        return render(request, 'users/contact.html', context='form': form)

因为您的错误将显示在您的表单中 else: 会返回 ValueError

【讨论】:

【参考方案4】:

我发现了错误(错字)。

sn-p 应该是:

% if form.errors %
    % for field in form %
        % for error in field.errors %
            <p>  error  </p>
        % endfor %
    % endfor %
% endif %

我有errors 而不是error

【讨论】:

以上是关于django 表单错误消息未显示的主要内容,如果未能解决你的问题,请参考以下文章

Django:提交表单时未显示错误

如何更改 Django 表单显示的默认错误消息

更改 django 在显示表单错误消息时使用的字段名称

表单未在 Django 中发布

在自定义 Django 表单中验证和显示错误

django如何访问错误消息列表中的第一个错误