【发布时间】:2016-01-28 21:04:42
【问题描述】:
我几乎尝试了所有代码组合,但无法理解我做错了什么。如何在表单上显示错误?
我有这样的设置:
base.html:
<head>
...
</head>
<body>
<header>
{% if user.is_anonymous %}
<div class="welcome">
<span>Welcome!</span>
</div>
{% else %}
<div class="wrapper">
<a href="/">Home</a>
<a href="/users/">Public Profiles</a>
<a href="/users/{{ username }}">My Profile</a>
<a href="/ribbits">Public Ribbits</a>
<form action="/logout">
<input type="submit" id="btnLogOut" value="Log Out">
</form>
</div>
{% endif %}
</header>
<div id="content">
<div class="wrapper">
{% block flash %}
{% if auth_form.non_field_errors or user_form.non_field_errors or ribbit_form.errors %}
<div class="flash error">
{{ auth_form.non_field_errors }}
{{ user_form.non_field_errors }}
{{ ribbit_form.content.errors }}
</div>
{% endif %}
{% if notice %}
<div class="flash notice">
{{ notice }}
</div>
{% endif %}
{% endblock %}
{% block content %}
{% endblock %}
</div>
</div>
</body>
</html>
注册.html: {% 扩展“base.html”%}
{% block content %}
<div class="panel right">
<h1>New to Ribbit?</h1>
<p>
<form action="/signup" method="post">{% csrf_token %}
{% for field in user_form %}
{{ field }}
{% endfor %}
<input type="submit" value="Create Account">
</form>
</p>
</div>
{% endblock %}
表格:
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'Email'}))
first_name = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'First Name'}))
last_name = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'Last Name'}))
username = forms.CharField(widget=forms.widgets.TextInput(attrs={'placeholder': 'Username'}))
password1 = forms.CharField(widget=forms.widgets.PasswordInput(attrs={'placeholder': 'Password'}))
password2 = forms.CharField(widget=forms.widgets.PasswordInput(attrs={'placeholder': 'Password Confirmation'}))
def is_valid(self):
form = super(UserCreateForm, self).is_valid()
for f, error in self.errors.iteritems():
if f != '__all_':
self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
return form
class Meta:
fields = ['email', 'username', 'first_name', 'last_name', 'password1',
'password2']
model = User
查看:
def signup(request):
user_form = UserCreateForm(data=request.POST)
if request.method == 'POST':
if user_form.is_valid():
username = user_form.cleaned_data['username']
password = user_form.cleaned_data['password2']
user_form.save()
user = authenticate(username=username, password=password)
login(request, user)
return redirect('/')
return register(request, user_form=user_form)
def register(request, user_form=None):
form = user_form or UserCreateForm()
return render(request, 'register.html', {'user_form': form})
【问题讨论】:
-
你有 javascript 处理表单的提交吗?
-
请注意,您错过了
__all_中的最后一个下划线。