【问题标题】:No file was submitted. Check the encoding type on the form没有提交文件。检查表单上的编码类型
【发布时间】:2013-06-05 10:30:21
【问题描述】:

下面显示了我的示例项目。但它在提交时引发错误。我已将 enctype 添加到表单字段。但没办法。请帮忙:)

html

<form class="forms2" action="." method="post" enctype="multipart/form-data">{%csrf_token%}
            <fieldset>
              <ol>

                   {% for field in forms %}
                   <li class="form-row">

                  <b>{{ field.label_tag }}</b> {{ field }} </li>
                  <i>{{ field.errors }}</i>


                  {%endfor%}



                  <li class="button-row">
                  <input type="submit" value="Submit" name="submit" class="btn-submit" />
                </li>
              </ol>

              </fieldset>

                </form>

forms.py

class CarrerApplication(forms.Form):
    applicant_name = forms.CharField(widget=forms.TextInput(attrs={'class':'text-input required'}),label='Name')
    applicant_address = forms.CharField(widget=forms.TextInput(attrs={'class':'text-input required'}),label='Address')
    applicant_email = forms.EmailField(widget=forms.TextInput(attrs={'class':'text-input required email'}),label='Email')
    applicant_mobile = forms.CharField(widget=forms.TextInput(attrs={'class':'text-input'}),label='Mobile')
    applicant_resume = forms.FileField(widget=forms.FileInput(attrs={'name':'applicant_resume'}),label='Resume')
    applicant_message = forms.CharField(widget=forms.Textarea(attrs={'class':'text-area'}),label='Message')



    def clean_applicant_resume(self):
        applicant_resume = self.cleaned_data['applicant_resume']
        exts = ['doc', 'docx', 'pdf', 'jpg', 'png', 'xls', 'xlsx', '.xlsm', '.xlsb']
        max_email_attach_size = 10485760 #10MB written in bytes

        if not applicant_resume in (None, ''):

            try:
                if applicant_resume.size > max_email_attach_size:
                    raise ValidationError("The file is too big")

                file_extension = applicant_resume.name.split('.')[1]
                if file_extension not in exts:
                    raise ValidationError("Invalid File Type")

            except AttributeError:
                raise ValidationError(self.error_messages['invalid'])

        return applicant_resume

views.py

def careers(request):



   if request.method == 'POST':

      form = CarrerApplication(request.POST,request.FILES)
      if form.is_valid():

            applicant_name= request.POST.get('applicant_name')
            applicant_address=request.POST.get('applicant_address')
            applicant_mobile=request.POST.get('applicant_mobile')
            applicant_email=request.POST.get('applicant_email')
            applicant_resume=request.FILES.get('applicant_resume')
            applicant_message = request.POST.get('applicant_message')
            subject = 'Resume from Blaah blaah'
            email = 'anishmenon@me.com'

            message_template = loader.get_template('resume_mail/resume_send.txt')
            message_context = Context({ 'name': applicant_name,'message':applicant_message })
            message = message_template.render(message_context)
            mail = EmailMessage(subject, message, applicant_email, [email])

            mail.attach(applicant_resume.name, applicant_resume.read(), applicant_resume.content_type)
            mail.send()

            return HttpResponse('Thanks')
   else:
        form = CarrerApplication()

   return render_to_response('resume_mail/resume_apply.html',
                           {'forms' : form},
                              context_instance=RequestContext(request))

我在提交表单时遇到错误

没有提交文件。检查表单上的编码类型。

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    您需要使用request.POSTrequest.FILES 实例化您的表单。

    form = CarrerApplication(request.POST, request.FILES)
    

    有关更多信息,请参阅binding uploaded files to a form 上的文档。

    【讨论】:

    • 如果您使用的是TextInput 小部件,为什么applicant_mobileFileField
    • 错字,谢谢告知。
    【解决方案2】:

    这样做会很酷

    form = CarrerApplication((request.POST,request.FILES) or None)
    if request.method == 'POST':
         .......
    

    【讨论】:

    • form = CarrerApplication(request.POST,request.FILES or None) (就够了)。
    【解决方案3】:

    我也遇到这个问题,我把FileInput改成ClearableFileInput。

    applicant_resume = forms.FileField(widget=forms.ClearableFileInput(attrs={'name':'applicant_resume'}),label='Resume')
    

    【讨论】:

    • 只是为了澄清,这是您解决问题的方法吗?
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 2015-12-13
    • 2019-04-30
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    相关资源
    最近更新 更多