如果仅在模板中立即给出错误输入,如何在 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>
<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 模板中显示表单错误?的主要内容,如果未能解决你的问题,请参考以下文章
AS3 Color.interpolateColor 仅在应用程序版本中给出错误?
UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?