Python 如何使用django显示无效电子邮件地址的错误消息

Python 如何使用django显示无效电子邮件地址的错误消息,python,django,forms,email,emailfield,Python,Django,Forms,Email,Emailfield,当用户输入时,我无法显示错误消息 无效的电子邮件地址 这是我的forms.py文件: from django import forms from .models import Contact from django.db import models class ContactForm(forms.ModelForm): class Meta: model = Contact fields = [ 'name',

当用户输入时,我无法显示错误消息 无效的电子邮件地址

这是我的forms.py文件:

from django import forms
from .models import Contact
from django.db import models


class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = [
            'name',
            'email',
            'message',
        ]

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={
            'placeholder': 'Name', 
            'required': True})

        self.fields['email'].widget = forms.TextInput(attrs={
            'placeholder': 'Email',
            'required': True})

        self.fields['message'].widget = forms.Textarea(attrs={
            'placeholder': 'Message',
            'rows': 6,
            'required': True})
from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect

from .models import Contact
from .forms import ContactForm
from django.contrib import messages

# Create your views here.

def contact_create(request):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit = False)
        instance.save()
        form = ContactForm()
        messages.success(request, 'Your message was sent successfully. We will contact you shortly.')
        return HttpResponseRedirect('/home/#contact')

    context = {
        "form": form,
    }

    return render(request, 'index.html', context)
这是我的models.py文件

from django.db import models
from django import forms
from django.core.validators import EmailValidator

# Create your models here.
class Contact(models.Model):
    name = models.CharField(max_length = 50)
    email = models.EmailField(blank = False, max_length = 200)
    message = models.TextField(blank = False)
这是my views.py文件:

from django import forms
from .models import Contact
from django.db import models


class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = [
            'name',
            'email',
            'message',
        ]

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={
            'placeholder': 'Name', 
            'required': True})

        self.fields['email'].widget = forms.TextInput(attrs={
            'placeholder': 'Email',
            'required': True})

        self.fields['message'].widget = forms.Textarea(attrs={
            'placeholder': 'Message',
            'rows': 6,
            'required': True})
from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect

from .models import Contact
from .forms import ContactForm
from django.contrib import messages

# Create your views here.

def contact_create(request):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit = False)
        instance.save()
        form = ContactForm()
        messages.success(request, 'Your message was sent successfully. We will contact you shortly.')
        return HttpResponseRedirect('/home/#contact')

    context = {
        "form": form,
    }

    return render(request, 'index.html', context)
最后是index.html文件中的我的表单

{% include "messages_display.html" %}
<form method="POST" action="">
    {% csrf_token %}
    <div class="row half">

        <div class = "6u" > {{ form.name }} </div>
        <div class = "6u" > {{ form.email }} </div>

    </div>
    <div class="row half">
        <div class="12u"> {{ form.message }} </div>
    </div>
    <div class="row">
        <div class="12u">
            <ul class="actions">
                <input type="submit" class="button" value="Send Message" />
            </ul>
        </div>
    </div>
</form>
因此,message.success显示良好,没有问题,我希望,如果用户输入无效的电子邮件地址,在电子邮件字段下显示错误消息,就像名称字段或消息字段留空一样,它正在显示请填写此字段


谢谢您的帮助。

当名称或消息字段为空时,您的表单不会显示错误,原因与它不会显示无效电子邮件错误相同:因为您没有在模板中放入任何内容来显示这些错误。您需要添加{form.email.errors}}等来完成此操作。

当名称或消息字段为空时,您的表单不会显示错误,原因与它没有显示无效的电子邮件错误相同:因为您没有在模板中放入任何内容来显示这些错误。您需要添加{form.email.errors}}等以实现此目的。

若要显示邮件字段的错误消息,表单的电子邮件字段应为forms.EmailInput

因此,您的forms.py文件应该是:

from django import forms
from .models import Contact
from django.db import models


class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = [
            'name',
            'email',
            'message',
        ]

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={
            'placeholder': 'Name', 
            'required': True})

        self.fields['email'].widget = forms.EmailInput(attrs={
            'placeholder': 'Email',
            'required': True})

        self.fields['message'].widget = forms.Textarea(attrs={
            'placeholder': 'Message',
            'rows': 6,
            'required': True})

要显示邮件字段的错误消息,表单的电子邮件字段应为forms.EmailInput

因此,您的forms.py文件应该是:

from django import forms
from .models import Contact
from django.db import models


class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = [
            'name',
            'email',
            'message',
        ]

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={
            'placeholder': 'Name', 
            'required': True})

        self.fields['email'].widget = forms.EmailInput(attrs={
            'placeholder': 'Email',
            'required': True})

        self.fields['message'].widget = forms.Textarea(attrs={
            'placeholder': 'Message',
            'rows': 6,
            'required': True})

你的答案也有用,但不是我想要的,谢谢你的答案也有用,但不是我想要的,谢谢