我正在使用 Django 框架构建自己的网站。\n我制作了一个用于创建新帐户的表单。它运行良好,但我的错误消息有问题。
\n\n当我第一次到达该页面时,我的所有错误都已显示。提交后,如果某个字段错误,则新更新的页面只显示想要的消息。
\n\n\n\n所以,我的问题是:如何才能仅在字段错误时显示消息?我已经成功地对每条消息进行了个性化设置。
\n\n我将我的不同 django 文件粘贴给你:
\n\n视图.py
\n\n@csrf_exempt\ndef create_new_user(request):\nform = UserCreateForm(request.POST)\nif request.method=="POST":\n if form.is_valid():\n user = form.save()\n messages.info(request, "Merci pour votre enregistrement, vous etes maintenant connecte")\n new_user = authenticate(username=form.cleaned_data[\'username\'],\n password=form.cleaned_data[\'password1\']\n )\n login(request, new_user)\n return HttpResponseRedirect(\'/\')\n return render_to_response(\'lejeudesbars/register.html\', RequestContext(request, {\'form\': form}))\nelse:\n return render(request, \'lejeudesbars/register.html\', {\'form\': form})\nRun Code Online (Sandbox Code Playgroud)\n\n表格.py
\n\nclass UserCreateForm(UserCreationForm):\n captcha = ReCaptchaField(error_messages={\'required\': \'Captcha: Validation obligatoire\'})\n email = forms.EmailField(required=True)\n username = forms.CharField(error_messages={\'required\': \'Pseudo: Champ obligatoire\'})\n email = forms.EmailField(error_messages={\'required\': \'Email: Champ obligatoire\'})\n password1 = forms.CharField(widget=forms.PasswordInput(), error_messages={\'required\': \'Mot de passe: Champ obligatoire\'})\n password2 = forms.CharField(widget=forms.PasswordInput(), error_messages={\'required\': \'Mot de passe: Confirmation obligatoire\'})\n\n\n class Meta:\n model = User\n fields = ("username", "email", "password1", "password2")\n\n def save(self, commit=True):\n user = super(UserCreateForm, self).save(commit=False)\n user.email = self.cleaned_data["email"]\n if commit:\n user.save()\n return user`\nRun Code Online (Sandbox Code Playgroud)\n\n索引.html
\n\n <form method="post" action="/accounts/register/">\n {% csrf_token %}\n <h1>S\'enregistrer</h1>\n\n {{ form.username }}\n {% if form.errors %}\n <p class="error-msg-register">{{ form.username.errors }}</p>\n {% endif %}\n\n {{ form.email }}\n {% if form.errors %}\n <p class="error-msg-register">{{ form.email.errors }}</p>\n {% endif %}\n\n {{ form.password1 }}\n {% if form.errors %}\n <p class="error-msg-register">{{ form.password1.errors }}</p>\n {% endif %}\n\n {{ form.password2 }}\n {% if form.errors %}\n <p class="error-msg-register">{{ form.password2.errors }}</p>\n {% endif %}\n\n {{ form.captcha }}\n {% if form.errors %}\n <p class="error-msg-register">{{ form.captcha.errors }}</p>\n {% endif %}\n\n <input style="padding: 10px" type="submit" value="Cr\xc3\xa9er mon compte" />\n <input type="hidden" name="next" value="{{ next }}" />\n </form>`\nRun Code Online (Sandbox Code Playgroud)\n\n预先感谢您对我的帮助!
\n\n(对不起,我的英语不好)
\n\n感谢 Daniel Roseman,我已经解决了我的问题。\n这是我更新的views.py:
\n\n视图.py
\n\n@csrf_exempt\ndef create_new_user(request):\n if request.method=="POST":\n form = UserCreateForm(request.POST)\n if form.is_valid():\n user = form.save()\n messages.info(request, "Merci pour votre enregistrement, vous etes maintenant connecte")\n new_user = authenticate(username=form.cleaned_data[\'username\'],\n password=form.cleaned_data[\'password1\']\n )\n login(request, new_user)\n else:\n form = UserCreateForm()\n return render(request, \'lejeudesbars/register.html\', {\'form\': form})\nRun Code Online (Sandbox Code Playgroud)\n
仅当 request.POST 实际上是 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})
Run Code Online (Sandbox Code Playgroud)
您也不需要那个中间的return render_to_response(...).