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 # -*- coding: utf-8 -*-
import os
from cgi import escape from cgi import escape
import os
import ho.pisa as pisa
from django.conf import settings from django.conf import settings
from django.http import HttpResponse from django.http import HttpResponse
from django.template import Context from django.template import Context
from django.template.loader import get_template from django.template.loader import get_template
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
import cStringIO as StringIO
import ho.pisa as pisa
def fetch_resources(uri, rel): 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 return path
def render_to_pdf(template_src, context_dict): def render_to_pdf(template_src, context_dict):
filename = template_src.replace('.html', '').replace('_pdf', '.pdf')
template = get_template(template_src) template = get_template(template_src)
context = Context(context_dict) context = Context(context_dict)
html = template.render(context) 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) pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, link_callback=fetch_resources)
if not pdf.err: 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)) return HttpResponse(_(u'We had some errors<pre>%s</pre>') % escape(html))

Loading…
Cancel
Save