2013-01-14 2 views
0

양식 값의 임시 pdf를 어떻게 생성하여 전자 메일에 첨부합니까? 당신은 form_view에서 그것을합니까?Django forms : 양식 값에서 전자 메일로 PDF 첨부 생성

def show_orderform(request): 
    if request.method == 'POST': 

     form = OrderForm(request.POST) 

     if form.is_valid(): 
      subject = "New order" 

      email = form.cleaned_data['email'] 

      recipients = ['[email protected]'] 

      rendered = render_to_string('emailtemplates/email_body.html', {'form':form , 'form_headline':subject}) 

      msg = EmailMultiAlternatives(subject, rendered, email, recipients) 
      msg.attach_alternative(rendered, "text/html") 
      msg.send()    
      return HttpResponseRedirect('/order/completed/') 


    else: 
     form = OrderForm() # An unbound form 

    return render(request, 'forms/orderform.html', { 
     'form': form, 
    }) 

답변

1

우리는을 사용하여 pdfs를 생성합니다. form.is_valid()와 pdf를 이메일에 첨부 할 때 어딘가에 그것을 할 수 있습니다.

이 세 가지 기능이 코드베이스에 추가되어 어느 곳에서나 pdfs를 생성 할 수 있습니다.

import os 
import StringIO 
import xhtml2pdf.pisa as pisa 

def fetch_resources(uri, rel): 
    """ 
    Callback to allow xhtml2pdf/reportlab to retrieve Images,Stylesheets, etc. 
    `uri` is the href attribute from the html link element. 
    `rel` gives a relative path, but it's not used here. 
    """ 
    if uri.startswith(settings.MEDIA_URL): 
     path = os.path.join(settings.MEDIA_ROOT, 
      uri.replace(settings.MEDIA_URL, "")) 
    elif uri.startswith(settings.STATIC_URL): 
     path = os.path.join(settings.STATIC_ROOT, 
      uri.replace(settings.STATIC_URL, "")) 
    else: 
     path = os.path.join(settings.STATIC_ROOT, 
      uri.replace(settings.STATIC_URL, "")) 

     if not os.path.isfile(path): 
      path = os.path.join(settings.MEDIA_ROOT, 
       uri.replace(settings.MEDIA_URL, "")) 

      if not os.path.isfile(path): 
       raise Exception(
        'media urls must start with %s or %s' % (
         settings.MEDIA_ROOT, settings.STATIC_ROOT)) 

    return path 


def render_to_pdf(template_src, context_dict): 
    """Function to render html template into a pdf file""" 
    template = get_template(template_src) 
    context = Context(context_dict) 
    html = template.render(context) 
    result = StringIO.StringIO() 

    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), 
     dest=result, 
     encoding='UTF-8', 
     link_callback=fetch_resources) 
    if not pdf.err: 
     response = HttpResponse(result.getvalue(), mimetype='application/pdf') 
     return response 

    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html)) 


def write_pdf(template_src, context_dict, filename): 
    template = get_template(template_src) 
    context = Context(context_dict) 
    html = template.render(context) 
    result = open(filename, 'wb') # Changed from file to filename 
    pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result) 
    result.close() 
관련 문제