我正在使用Django的框架构建自己的网站。 我创建了一个用于创建新帐户的表单。它运作良好,但我的错误消息有问题。
当我第一次到达页面时,我的所有错误都已显示。提交后,如果字段错误,则新更新的页面仅显示所需消息。
Here is a view of my page at my first arrival
所以,我的问题是:如果字段错误,我该如何才能显示消息?我已经成功地将每条消息个性化。
我粘贴了我不同的django文件:
views.py
@csrf_exempt
def create_new_user(request):
form = UserCreateForm(request.POST)
if request.method=="POST":
if form.is_valid():
user = form.save()
messages.info(request, "Merci pour votre enregistrement, vous etes maintenant connecte")
new_user = authenticate(username=form.cleaned_data['username'],
password=form.cleaned_data['password1']
)
login(request, new_user)
return HttpResponseRedirect('/')
return render_to_response('lejeudesbars/register.html', RequestContext(request, {'form': form}))
else:
return render(request, 'lejeudesbars/register.html', {'form': form})
forms.py
class UserCreateForm(UserCreationForm):
captcha = ReCaptchaField(error_messages={'required': 'Captcha: Validation obligatoire'})
email = forms.EmailField(required=True)
username = forms.CharField(error_messages={'required': 'Pseudo: Champ obligatoire'})
email = forms.EmailField(error_messages={'required': 'Email: Champ obligatoire'})
password1 = forms.CharField(widget=forms.PasswordInput(), error_messages={'required': 'Mot de passe: Champ obligatoire'})
password2 = forms.CharField(widget=forms.PasswordInput(), error_messages={'required': 'Mot de passe: Confirmation obligatoire'})
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(UserCreateForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user`
的index.html
<form method="post" action="/accounts/register/">
{% csrf_token %}
<h1>S'enregistrer</h1>
{{ form.username }}
{% if form.errors %}
<p class="error-msg-register">{{ form.username.errors }}</p>
{% endif %}
{{ form.email }}
{% if form.errors %}
<p class="error-msg-register">{{ form.email.errors }}</p>
{% endif %}
{{ form.password1 }}
{% if form.errors %}
<p class="error-msg-register">{{ form.password1.errors }}</p>
{% endif %}
{{ form.password2 }}
{% if form.errors %}
<p class="error-msg-register">{{ form.password2.errors }}</p>
{% endif %}
{{ form.captcha }}
{% if form.errors %}
<p class="error-msg-register">{{ form.captcha.errors }}</p>
{% endif %}
<input style="padding: 10px" type="submit" value="Créer mon compte" />
<input type="hidden" name="next" value="{{ next }}" />
</form>`
提前感谢您的帮助!
(抱歉我的英语不好)
感谢Daniel Roseman,我已经解决了我的问题。 这是我更新的views.py:
views.py
@csrf_exempt
def create_new_user(request):
if request.method=="POST":
form = UserCreateForm(request.POST)
if form.is_valid():
user = form.save()
messages.info(request, "Merci pour votre enregistrement, vous etes maintenant connecte")
new_user = authenticate(username=form.cleaned_data['username'],
password=form.cleaned_data['password1']
)
login(request, new_user)
else:
form = UserCreateForm()
return render(request, 'lejeudesbars/register.html', {'form': form})
答案 0 :(得分:4)
如果它实际上是POST,你应该只将request.POST传递给字段。所以:
def create_new_user(request):
if request.method=="POST":
form = UserCreateForm(request.POST)
if form.is_valid():
...
else:
form = UserCreateForm()
return render(request, 'lejeudesbars/register.html', {'form': form})
您也不需要中间return render_to_response(...)
。
答案 1 :(得分:0)
在每个字段中,您有{%if form.errors%} - 所以当至少有一个错误时,您将在任何地方显示它。
将其更改为{% if form.field_name.errors %}
,然后html应仅呈现与该特定字段相关的错误