【问题标题】:How to show custom error in Django?如何在 Django 中显示自定义错误?
【发布时间】:2015-06-01 11:42:59
【问题描述】:

我是 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_messages 这是Invalid URL(当调试为真时)。

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

提前致谢。

【问题讨论】:

    标签: html django python-3.x django-forms


    【解决方案1】:

    您应该在检查表单 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

    【讨论】:

    • forms.py中的代码我不是很懂,请问form.cleaned_data是怎么得到的?
    • 更新了将“form”更改为“self”的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2014-11-06
    • 2014-08-08
    相关资源
    最近更新 更多