【问题标题】:How to Show Form Errors in Django Templates if wrong input is given in template only instantly?如果仅在模板中立即给出错误输入,如何在 Django 模板中显示表单错误?
【发布时间】: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.errors}}{{form.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) 未能返回响应的部分。
  • 可以通过在代码中发布答案来帮助我...??

标签: django python-2.7 django-forms django-templates django-views


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 2016-04-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2020-03-20
    • 2023-01-10
    相关资源
    最近更新 更多