如何在模板中显示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,所以我不明白这个额外检查的目的是什么。