首页 > 解决方案 > 如何在 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
   

标签: django

解决方案


当表单无效时,在 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 属性)


推荐阅读