如何在模板中显示show ValidationError
How to show the show ValidationError in template
我已经构建了一个视图、一个模板和一个表单,用于上传 CSV 文件和其他一些信息。
我在显示 ValidationError 时遇到问题,我在我的 clean() 函数中定义了以下形式:
这是表格的一部分:
class UploadCSVForm(forms.Form):
title = forms.CharField(max_length=255, help_text='Title', required=True)
LAYER_TYPE = (
('1', 'Globa;'),
)
layer_type = forms.ChoiceField(choices=LAYER_TYPE, help_text='Type of layer', required=True)
csv = forms.FileField(required=True)
def clean(self):
cleaned_data = super(UploadCSVForm, self).clean()
csv_file = self.cleaned_data.get('csv')
if not csv_file:
raise forms.ValidationError(_("CSV must be a file."))
return cleaned_data
这是我的部分观点:
def layer_create(request, template='layers/layer_create.html'):
....
elif request.method == 'POST':
form = UploadCSVForm(request.POST, request.FILES)
out = {}
if form.is_valid():
try:
title = form.cleaned_data["title"]
except:
...
return render_to_response(template, RequestContext(request, {'form': form}))
这就是我在模板中呈现表单的方式:
<form id="file-uploader" method="post" enctype="multipart/form-data" action="{% url "layer_create" %}">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{% for field in form.visible_fields %}
{{ field.help_text }} <br/>
{{ field }} <br/>
{{ field.errors }}<br/>
{% endfor %}
<button type="submit" id="upload-button" class="btn btn-danger">Upload</button>
</form>
问题是 {{ field.errors }}
没有显示我的 ValidationError。
您在 clean()
方法中提出了验证,因此该错误将存储在 form.non_field_errors()
.
如果您只想检查 csv
字段的值并将错误分配给该字段,那么您应该改写 clean_csv
。
def clean_csv(self):
csv = self.cleaned_data['csv']
if not csv:
raise forms.ValidationError(_("CSV must be a file."))
return csv
您已经 required=True
,所以我不明白这个额外检查的目的是什么。
我已经构建了一个视图、一个模板和一个表单,用于上传 CSV 文件和其他一些信息。
我在显示 ValidationError 时遇到问题,我在我的 clean() 函数中定义了以下形式:
这是表格的一部分:
class UploadCSVForm(forms.Form):
title = forms.CharField(max_length=255, help_text='Title', required=True)
LAYER_TYPE = (
('1', 'Globa;'),
)
layer_type = forms.ChoiceField(choices=LAYER_TYPE, help_text='Type of layer', required=True)
csv = forms.FileField(required=True)
def clean(self):
cleaned_data = super(UploadCSVForm, self).clean()
csv_file = self.cleaned_data.get('csv')
if not csv_file:
raise forms.ValidationError(_("CSV must be a file."))
return cleaned_data
这是我的部分观点:
def layer_create(request, template='layers/layer_create.html'):
....
elif request.method == 'POST':
form = UploadCSVForm(request.POST, request.FILES)
out = {}
if form.is_valid():
try:
title = form.cleaned_data["title"]
except:
...
return render_to_response(template, RequestContext(request, {'form': form}))
这就是我在模板中呈现表单的方式:
<form id="file-uploader" method="post" enctype="multipart/form-data" action="{% url "layer_create" %}">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{% for field in form.visible_fields %}
{{ field.help_text }} <br/>
{{ field }} <br/>
{{ field.errors }}<br/>
{% endfor %}
<button type="submit" id="upload-button" class="btn btn-danger">Upload</button>
</form>
问题是 {{ field.errors }}
没有显示我的 ValidationError。
您在 clean()
方法中提出了验证,因此该错误将存储在 form.non_field_errors()
.
如果您只想检查 csv
字段的值并将错误分配给该字段,那么您应该改写 clean_csv
。
def clean_csv(self):
csv = self.cleaned_data['csv']
if not csv:
raise forms.ValidationError(_("CSV must be a file."))
return csv
您已经 required=True
,所以我不明白这个额外检查的目的是什么。