如何在 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_messages
即 Invalid 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
我是 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 页面上显示错误消息而不是显示调试页面?
提前致谢。
在检查表单是否存在之前,您应该在表单中进行数据验证 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