如何在 Django 中显示自定义错误?

How to show custom error in Django?

我是 Django 的新手,这是我目前所做的。

我想获取 CharField 数据并将其验证为 URL。我做了以下。

models.py

from django.db import models

class Small(models.Model):
    url_new = models.CharField(max_length=500, default='abc', unique=True)

def __str__(self):
        return self.url_new

views.py

from django.shortcuts import render, HttpResponseRedirect, Http404
from django.core.validators import URLValidator
from django.core.exceptions import ValidationError

from .forms import SmallForm, URLForm
from .models import Small
def home(request):
    form = SmallForm(request.POST or None)
    if form.is_valid():
        url_validate = URLValidator()
        url_new = form.cleaned_data['url_new']

        try:
            url_validate(url_new)
        except ValidationError:
            raise form.fields['url_new'].error_messages['Invalid URL']

    context = {"form": form}
        template = "home.html"
        return render(request, template, context)

forms.py

from django import forms

from .models import Small


class URLForm(forms.Form):
    url_new = forms.CharField()


class SmallForm(forms.ModelForm):
    class Meta:
        model = Small
        fields = ["url_new", ]

所以,我能够验证 html 页面上的表单,但只有当表单为空并且我单击提交按钮时。

但是当我在表单字段中输入非 url 内容后单击提交时,它会将我带到一个新页面并显示 error_messagesInvalid URL(当调试为真)。

有什么方法可以验证它并在 html 页面上显示错误消息而不是显示调试页面?

提前致谢。

在检查表单是否存在之前,您应该在表单中进行数据验证 is_valid()

forms.py

class SmallForm(forms.ModelForm):

    def clean_url_new(self):
        data = self.cleaned_data['url_new']
        try:
            url_validate(data)
        except ValidationError:
            raise self.fields['url_new'].error_messages['Invalid URL']
        return data


    class Meta:
        model = Small
        fields = ('url_new', )

views.py

def home(request):
    if request.method == 'POST':
        form = SmallForm(request.POST)
        if form.is_valid():
            # form success logic
            return HttpResponseRedirect('/thanks/')
    else:
        form = SmallForm()

    return render(request, 'home.html', {'form': form})

文档:https://docs.djangoproject.com/en/1.7/ref/forms/validation/#cleaning-a-specific-field-attribute