这是我的注册表格:
class RegistrationForm(forms.Form):
username = forms.CharField(label='Username', max_length=30)
email = forms.EmailField(label='Email')
password1 = forms.CharField(label='Password', widget=forms.PasswordInput())
password2 = forms.CharField(label='Password (Again)', widget=forms.PasswordInput())
def clean_password2(self):
if 'password1' in self.cleaned_data:
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 == password2:
return password2
raise forms.ValidationError('Passwords do not match.')
def clean_username(self):
username = self.cleaned_data['username']
if not re.search(r'^\w+$', username): #checks if all the characters in username are in the regex. If they aren't, it returns None
raise forms.ValidationError('Username can only contain alphanumeric characters and the underscore.')
try:
User.objects.get(username=username) #this raises an ObjectDoesNotExist exception if it doesn't find a user with that username
except ObjectDoesNotExist:
return username #if username doesn't exist, this is good. We can create the username
raise forms.ValidationError('Username is already taken.')
这是我的模板:
{% if form.errors %}
{% for field in form %}
{% if field.label_tag == "Password (Again)" %}
<p>The passwords which you entered did not match.</p>
{% else %}
{{ field.label_tag }} : {{ field.errors }}
{% endif %}
{% endfor %}
{% endif %}
我基本上想说
The passwords which you entered did not match.
如果Django为password2字段返回错误。我在RegistrationForm中说过
password2 = forms.CharField(label='Password (Again)'
但Django直接执行else语句并执行行
{{ field.label_tag }} : {{ field.errors }}
当我查看网络浏览器时,它说
Password (Again) : This field is required.
所以
field.label_tag
等于
"Password (Again)"
正确?我的
怎么样?if field.label_tag == "Password (Again)"
语句未评估为true?
答案 0 :(得分:1)
您在浏览器中看到的不是field.label_tag
真正的内容。
实际上field.label_tag
就像这样(你可以查看HTML源代码):
<label for="id_password2">Password (Again):</label>
引用一个伟人(和Django documentation):
{{field.label_tag}}字段的标签包含在适当的标签中 HTML标记。
此代码应该有效:
{% if field.label_tag == '<label for="id_password2">Password (Again):</label>' %}
etc
现在,显然,没有人想要编写这样的代码。带有HTML代码的字符串?来吧,奈杰尔,你比这更好!
这是更好的方法:
{% if field.name == 'password2' %}
etc
实际上,我认为甚至有更好的方法来处理表单错误。您可以阅读文档here。