django - 如何在 html 模板中显示 djago 验证错误消息?
问题描述
我为我提交的每个表单设置了 max_length 限制。我希望当任何用户超过最大长度限制时,不会提交联系表单并显示错误消息。例如,如果任何用户忘记填写名称字段,那么它将显示名称是必需的,或者如果它超过最大长度限制,那么它将显示“最多允许 300 个字符”。这是我的代码:
#forms.py
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=300)
email = forms.EmailField(max_length=300)
subject = forms.CharField(max_length=1000)
message = forms.CharField(max_length=3000)
#models.py
from django.db import models
from django.utils import timezone
# Create your models here.
class Contact(models.Model):
current_time = models.DateTimeField(blank=True, null=True,default=timezone.now)
name =models.CharField(max_length=300)
subject =models.CharField(max_length=1000, default="")
email =models.EmailField(max_length=300)
message = models.TextField(max_length=3000)
views.py
@csrf_exempt
def home_view(request,*args,**kwargs):
if request.method == "POST":
contacts = ContactForm(request.POST)
if contacts.is_valid():
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
message = request.POST['message']
post = Contact(name=name,email=email,subject=subject,message=message)
post.save()
context= {'message_name':name}
return render(request, 'index.html',context)
else:
print('not submittd')
fm = ContactForm()
context= {'form':fm}
return render(request, 'index.html',context)
这是我的联系人的 html 代码,来自:
<section class="contact section" id="contact">
<h2 class="section-title">Contact</h2>
{% if message_name %}
<div class="centerTest">
<h1> Thanks {{ message_name }} for your message. We will get back to you very soon</h1>
</div>
{% else %}
<div class="contact__container bd-grid">
<form action="#contact" method = "POST" class="contact__form">
<input type="text" placeholder="Name" name="name" class="contact__input">
<input type="mail" placeholder="Email" name="email" class="contact__input">
<input type="text" placeholder="subject" name="subject" class="contact__input">
<textarea name="message" placeholder="message" id="" cols="0" rows="10" class="contact__input"></textarea>
<div class="g-recaptcha" data-sitekey="6LciYlMaAAAAAE28SyHrqdm9g6a43UGIf6_ImvF8"></div>
<br/>
<input type="submit" value="Send" class="contact__button button">
{% endif %}
</form>
</div>
</section>
我也在我的 forms.py 中尝试了这个,但没有看到任何错误消息:
#Validation #DataFlair
def clean_name(self):
name = self.cleaned_data['name']
if len(name) > 300:
raise forms.ValidationError("maximum character exceed")
return name
解决方案
当表单无效时,在 else 中查看:-
else:
name = request.POST.get('name', None)
if name:
if len(name) > 300:
name_error = "maximum 300 characters allowed"
else:
name_error = "Name required"
context = {"fm":ContactForm(), "name_error": name_error}
return render(request, 'index.html', context)
在 html 中
<input type="text" placeholder="Name" name="name" class="contact__input">
{% if name_error %}
<small> {{name_error}} </small>
{% endif %}
或者,您可以使用 ModelForm 或 html 验证(文本输入的必需和 maxlength 属性)
推荐阅读
- c++ - 为什么
暴露 std 命名空间之外的实体? - prolog - Prolog递归地将函数应用于列表
- python - Python 从电子邮件中提取特定附件
- json - 已解决 - 来自 JSON 文件的 Vue JS Google 地图标记。JSON 中第 139 位的意外标记}
- spring - 无法解决 databind.exc.InvalidDefinitionException: 无法构造实例问题
- java - 有人可以帮我解决我的代码错误吗?
- javascript - 如何将 TreeModel Js 模型输出为 JSON
- mysql - 比较聚合中两个表的多个内容
- python - 产生while循环运行时错误的函数?
- c# - 如何在组合框中显示所有键盘键