Browse Source

Render_to_pdf encontrar imagens em STATIC ou MEDIA e forçar download

pull/11/head
Sesostris Vieira 6 years ago
parent
commit
6f2a8f006b
  1. 22
      sigi/shortcuts.py

22
sigi/shortcuts.py

@ -1,21 +1,31 @@
import cStringIO as StringIO
import os
# -*- coding: utf-8 -*-
from cgi import escape
import os
import ho.pisa as pisa
from django.conf import settings
from django.http import HttpResponse
from django.template import Context
from django.template.loader import get_template
from django.utils.translation import ugettext as _
import cStringIO as StringIO
import ho.pisa as pisa
def fetch_resources(uri, rel):
path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
if uri.find(settings.STATIC_URL) != -1:
# Imagem está em STATIC_ROOT
path = os.path.join(settings.STATIC_ROOT,
uri.replace(settings.STATIC_URL, ""))
else:
# Imagem está em MEDIA_ROOT
path = os.path.join(settings.MEDIA_ROOT,
uri.replace(settings.MEDIA_URL, ""))
return path
def render_to_pdf(template_src, context_dict):
filename = template_src.replace('.html', '').replace('_pdf', '.pdf')
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
@ -23,5 +33,7 @@ def render_to_pdf(template_src, context_dict):
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, link_callback=fetch_resources)
if not pdf.err:
return HttpResponse(result.getvalue(), content_type='application/pdf')
response = HttpResponse(result.getvalue(), content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename=' + filename
return response
return HttpResponse(_(u'We had some errors<pre>%s</pre>') % escape(html))

Loading…
Cancel
Save