django 没有在表单中显示 error_messages
Posted
技术标签:
【中文标题】django 没有在表单中显示 error_messages【英文标题】:django not displaying error_messages in forms 【发布时间】:2021-04-12 13:38:09 【问题描述】:我是 django 的新手,我正在处理这个表单,我已经尝试了所有可能的方法,但我似乎无法显示表单错误消息。我尝试使用 def clean 方法,当我尝试提交空表单时没有任何反应。我厌倦了使用 FormView 我也尝试使用函数视图我尝试使用 for 循环并添加 form.non_field_errors 在我的模板中没有弹出任何内容。
我的应用程序/forms.py
from django import forms
class ContactForm(forms.Form):
name = forms.CharField( label='Your Name', min_length=2, max_length=25, required=True, error_messages ='required':'Please tell Oluwafemi your name')
email = forms.EmailField(label='Your Email', required=True, error_messages='invalid':'Please fill in a valid email')
subject = forms.CharField(label='Subject', min_length=4, max_length=100, required=True)
message = forms.CharField(widget=forms.Textarea(attrs='placeholder':'Write Oluwafemi a Message'), error_messages ='required':'Please write something for Oluwafemi')
我的应用/views.py
from django.views.generic import TemplateView
from django.shortcuts import render
from django.core.mail import send_mail
from .forms import ContactForm
from django.http import HttpResponseRedirect
# Create your views here.
class ProfilePageView(TemplateView):
template_name = 'femi_profile.html'
form_class = ContactForm
success_url = 'femiir'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, 'form': form)
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
subject = form.cleaned_data['subject']
message = form.cleaned_data['message']
# Send the email
send_mail(
f"subject - message from name ", # message subject
message, # Message Body
email, # Sender's mail (From mail)
['d4rahl@gmail.com'], # Reciever's mail(To mail)
)
return HttpResponseRedirect('femiir')
return render(request, self.template_name, 'form': form)
我的html模板的sn-p
<div class="col-lg-7 mt-5 mt-lg-0 d-flex align-items-stretch">
<form method="post">
% csrf_token %
<div class="form-row">
<div class="form-group col-md-6">
form.name|as_crispy_field
</div>
<div class="form-group col-md-6">
form.email|as_crispy_field
</div>
</div>
<div class="form-group">
form.subject|as_crispy_field
form.message|as_crispy_field
</div>
<div class="text-center"><button type="submit" class="btn btn-primary ">Send Message</button></div>
</form>
</div>
请问我做错了什么
【问题讨论】:
【参考方案1】:您是否尝试循环遍历模板中的 form.errors?
% if form.errors %
% for field in form %
% for error in field.errors %
error
% endfor %
% endfor %
% for error in form.non_field_errors %
error
% endfor %
% endif %
【讨论】:
我刚刚做了,但没有显示任何内容 还尝试检查表单是否有效,而且我没有看到任何 form.save() 方法,因此表单不会保存在 dB 中。请应用调试器并查看它是否正在进入 form.is_valid() ,如果没有则检查在调试器中查看表单。模板中的表单也没有操作 URL 这似乎很多我对这一切都很陌生......但我没有使用数据库这是一个与我联系的表格,用于仅发送邮件的投资组合项目......我应该在哪里添加form.save() 方法,我不知道如何使用调试器以及什么是操作 URL 试试这个% for hidden_field in form.hidden_fields % hidden_field.errors hidden_field % endfor %
这有帮助吗?否则你可以通过这个simpleisbetterthancomplex.com/article/2017/08/19/…这更容易并且更好地理解
老实说,我从任何地方都不认识你,但我想感谢创造天地的主继续祝福你,愿你翱翔,远超你想象的上帝会升起你高高在上,祝福你的生活......非常感谢【参考方案2】:
当您手动呈现字段时,您将不得不使用错误标签。
form.name_of_field.errors
<form method="post">
% csrf_token %
<div class="form-row">
<div class="form-group col-md-6">
form.name|as_crispy_field
form.name.errors
</div>
<div class="form-group col-md-6">
form.email|as_crispy_field
form.email.errors
</div>
</div>
<div class="form-group">
form.subject|as_crispy_field
form.subject.errors
form.message|as_crispy_field
form.message.errors
</div>
<div class="text-center"><button type="submit" class="btn btn-primary ">Send Message</button></div>
</form>
https://docs.djangoproject.com/en/dev/topics/forms/#rendering-fields-manually
【讨论】:
我会试试这个并给你反馈 我刚试过这个,当我尝试提交空表单时,我的表单只会将字段圈成红色 检查您的 ContactForm,您已将字段设置为 required=True。因此,您不能提交空表单。如果字段变为红色,则表示错误运行正常。如果您希望用户提交空表单,请设置 required=False 您知道为什么字段错误不起作用。它不会在字段下方或上方写入错误消息 我希望它显示类似 ** 的内容。当有人没有写电子邮件或遗漏它时,请输入有效的电子邮件**以上是关于django 没有在表单中显示 error_messages的主要内容,如果未能解决你的问题,请参考以下文章