如果仅在模板中立即给出错误输入,如何在 Django 模板中显示表单错误?

Posted

技术标签:

【中文标题】如果仅在模板中立即给出错误输入,如何在 Django 模板中显示表单错误?【英文标题】:How to Show Form Errors in Django Templates if wrong input is given in template only instantly? 【发布时间】:2014-04-09 11:39:24 【问题描述】:

:::views.py:::

class userdetailsView(FormView):
form_class = userdetailsViewForm
template_name = "customer/user.html"

def form_valid(self, form):
    import os
    fir = self.request.POST['employee_id']
    sec = self.request.POST['name']
    thi = self.request.POST['email']
    fou = self.request.POST['address']

    yo ="&&".join([fir,sec,thi,fou])
    print 'Encrypted string:', yo
    return render(self.request, userdetailsView.template_name, 'result': yo ,  'form': form)

:::forms.py:::

from django import forms
class userdetailsForm(forms.Form):
employee_id    = forms.IntegerField(min_value = 1,max_value = 999, widget=forms.TextInput(attrs='class':'form-control', 'placeholder': 'employee id'))
name     = forms.CharField(max_length = 10, widget=forms.TextInput(attrs='class':'form-control', 'placeholder': 'name'))
email                 = forms.EmailField(max_length = 25, widget=forms.TextInput(attrs='class':'form-control', 'placeholder': 'email'))
address = forms.CharField(max_length = 50, widget=forms.TextInput(attrs='class':'form-control', 'placeholder': 'address'))

:::user.html:::

% block body %
<div class='col-md-6'>
<form role="form" method='POST'>

% csrf_token %
 form.non_field_errors 
<div class="form-group">
<label for="id_employee_id">form.employee_id.label</label>
 form.employee_id.errors form.employee_id

<div class="form-group">
<label for="id_name">form.name.label</label>
 form.name.errors form.name
</div>
<div class="form-group">

<label for="id_email">form.email.label</label>
 form.email.errors form.email
</div>
<div class="form-group">

<label for="id_address">form.address.label</label>
 form.address.errorsform.address
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</form>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><strong>user encrypted data</strong></h3>
</div>
  &nbsp;
<div class="well well-lg" >

 result 

</div>
% endblock %

不要使用加密算法,因为我还没有编写它,现在我只是加入值并将其打印在一个盒子里。 我面临的问题是,如果我现在在各自的员工 ID、姓名、电子邮件、地址中插入 999、asa、a@gmail.com、82a...它正在获取并在框中打印值.. 但是,如果我在employee_id(或任何4个字段中的任何错误输入)表单中插入错误的输入,如9999: 它在页面中显示此错误::

ValueError at /device/userdetail/
The view devices.views.userdetailFormView didn't return an HttpResponse object 

在终端显示以下错误::

<ul class="errorlist"><li>employee_id<ul class="errorlist"><li>Ensure this value is less     than or equal to 999.</li></ul></li></ul>

**我想在模板页面(除了输入框之外)本身打印错误,以便用户在输入不正确的数据时知道要插入和正确插入的内容。

【问题讨论】:

这不是您的完整代码。您在某处覆盖了另一种方法,该方法未能返回响应(并将该数据打印到控制台)。无论如何,你不应该在form_valid 中调用render,这不是它的用途。而且,正如我之前告诉过你的,你应该让你的变量更具描述性。 与其做出愚蠢的抱怨,不如阅读并理解我的评论:您的错误是由于您未显示的一些代码而发生的。请张贴。 哪个代码我没有显示??请说明... userdetailsView 的其余部分,即 a) 打印该表单错误和 b) 未能返回响应的部分。 可以通过在代码中发布答案来帮助我...?? 【参考方案1】:

*我的问题的答案。在views.py中的form_valid函数后添加以下代码*

def form_invalid(self, form):
    print form.errors
    return render(self.request, userdetailsView.template_name, 'result': '' ,  'form': form)

【讨论】:

以上是关于如果仅在模板中立即给出错误输入,如何在 Django 模板中显示表单错误?的主要内容,如果未能解决你的问题,请参考以下文章

DElPHI中,如何在文本框中输入错误数据是给出提示

AS3 Color.interpolateColor 仅在应用程序版本中给出错误?

knockoutjs 验证,立即验证

UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?

键盘在 Android 上打开并立即消失

如果在模板中使用变量获取错误未定义,则异步 vuex 获取操作状态已填充