2013-12-21 2 views
4

안녕하세요 저는 follwoing 2 기능을 사용하여 메일을 통해 pdf 파일을 만들어 보냅니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까. (내보내기 PDF 기능은 브라우저에서 표시 할 때 제대로 작동합니다.) "TypeError : 'ContentFile'객체가 인덱싱" "을 지원하지 않습니다. 내가 뭘 잘못하고 있니? 거의 모든이 코드는 일부 블로그에서 가져온 것이므로 어떻게 작동하는지 정확히 알지 못합니다. 그러나 당신이 어떤 점을 이해하지 못한다면 의견을 말하십시오. 나는 대답 할 것이다.Django에서 전자 메일 첨부 파일로 PDF를 보내는 방법

if request.method=="POST": 

    form = ReportSendMailForm(request.POST) 

    if form.is_valid(): 

     email = form.cleaned_data['mail'] 
     message = form.cleaned_data['message']    
     print email 
     print message 
     result = export_pdf(request,id) 
     file_to_be_sent= ContentFile(result) 
     #print file_to_be_sent 
     if result: 
      #try : 

       subject, from_email, to = request.user.username+' has sent a report for review',' Dtz Team', email     
       html_content = render_to_string('email/report.html',{'username':request.user,'messgae':message})       
       msg = EmailMultiAlternatives(subject,'', from_email, [to]) 

       msg.attach_alternative(html_content, "text/html") 
       msg.attach("Report.pdf", file_to_be_sent, "application/pdf") 

       msg.send() 
       messages.success(request,'Please check your email id '+email+' for further instructions.') 
       return HttpResponse('success')   
      #except: 
      #   pass    
messages.error(request,'Error occured in the pdf.')    
return HttpResponse(status=410) 

PDF 내보내기 기능은

def export_pdf(request,id): 
    report = Report.objects.get(id=id)     
    options1 = ReportPropertyOption.objects.filter(report=report,is_active=True) 
    for option in options1: 
     option.exterior_images = ReportExteriorImages.objects.filter(report = option) 
     option.interior_images = ReportInteriorImages.objects.filter(report = option) 
     option.floorplan_images = ReportFloorPlanImages.objects.filter(report = option) 
     option.fitouts = ReportFitOut.objects.filter(propertyoption = option) 
     if (option.gps_longitude): 
      option.map = "http://maps.google.com/maps/api/staticmap?zoom=12&size=400x400&maptype=roadmap&sensor=false&center=\""+str(option.gps_latidtude)+","+str(option.gps_longitude)+"\""     

    html = render_to_string('report/export.html', { 'pagesize' : 'A4', }, context_instance=RequestContext(request,{'options1':options1,'meta':report.meta})) 
    result = StringIO.StringIO()  
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources) 
    if not pdf.err: 
     return result 
    else: 
     return None 

답변

4

당신은 django.core.files.ContentFile를 사용하지 말아야합니다, 그것은 단지 문자열을 받아들입니다.

file_to_be_sent= export_pdf(request,id).getvalue() # if it's not None 
msg.attach("Report.pdf", file_to_be_sent, "application/pdf") 
+0

정말 빠르고 정확했습니다. 고마워 :) 그리고 완벽하게 일했습니다. –

관련 문제