django中的表单字段可以具有的两种类型的验证错误是“必需”和“无效”。有没有办法从模板中找出这两个错误中的哪一个发生了?像
这样的东西{% if form.username.errors %}
{% for error in form.username.errors %}
{% if error.required %}
Please enter the username
{% else %}
{{ error }}
{% endif %}
我只想覆盖“必需”错误的错误消息,即,如果发生错误,我想显示自己的错误消息。我使用的django.contrib.auth.views
使用django.contrib.auth.forms.AuthenticationForm
,我不想尝试自定义。
答案 0 :(得分:2)
希望您在html模板中搜索此类句柄
{% for x in form.errors %}
{%if "__all__" in x %}
Wrong username and password
{%else%}
{%if "username" in x %}
Requires username
<br>
{%endif%}
{%if "password" in x %}
Requires Password
<br>
{%endif%}
{%endif%}
{%endfor%}
邮件将在您的登录页面上以这样的方式打印
需要用户名 需要密码
用户名和密码错误
答案 1 :(得分:1)
您真的应该覆盖身份验证表单。视图接受一个允许您轻松覆盖表单的参数。
我认为这样的事情应该有效:
您需要做的就是覆盖clean_username方法,如下所示:
编辑:
form and field validation docs
中的以下内容,覆盖clean_username方法无法更改验证错误消息:
Field上的clean()方法 子类。这是负责任的 运行to_python,验证和 run_validators按正确的顺序排列 并传播他们的错误。如果,在 任何时候,任何方法提出 ValidationError,验证停止 并且引发了该错误。这种方法 返回干净的数据,然后 插入到cleaning_data中 表格字典。
a中的
clean_<fieldname>()
方法 表单子类 - 在哪里 替换为表单的名称 字段属性。这种方法可以做到 清洁是特定的 特殊属性,与...无关 它的字段类型。这种方法 没有传递任何参数。你会 需要查看该字段的值 在self.cleaned_data并记住这一点 它将是一个Python对象 点,不是原始字符串 以表格提交(将在 cleaning_data因为一般字段 上面的clean()方法已经有了 清理数据一次。)
首先验证Field子类,并返回用于clean_<field_name>()
方法的已清理数据。如果发生错误,则该字段的验证将停止。
这意味着要覆盖消息,您需要覆盖字段验证或使字段不需要值,因此在该步骤中不会引发验证错误并在clean_<fieldname>()
方法中引发所需方法
>>> from django.contrib.auth.forms import AuthenticationForm
>>> class MyAuthForm(AuthenticationForm):
... def __init__(self, *args, **kwargs):
... super(MyAuthForm, self).__init__(*args,**kwargs)
... self.fields['username'].error_messages['required']='Custom Required Msg'
...
>>> form = MyAuthForm(data={'password':'asdf'})
>>> form.is_valid()
False
>>> form.errors
{'username': [u'Custom Required Msg']}
>>>
urls.py
from someapp.forms import MyAuthForm
urlpatterns = patterns('',
...
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'someapp/login.html', 'authentication_form':MyAuthForm, }),
...