aboutsummaryrefslogtreecommitdiffstats
path: root/wkhtmltopdf/views.py
diff options
context:
space:
mode:
authorGeorge Hickman <george@ghickman.co.uk>2011-10-30 19:58:10 +0000
committerGeorge Hickman <george@ghickman.co.uk>2011-10-30 19:58:10 +0000
commit2c6a5f64f060a4ebcb6166068b04202f9f007ec8 (patch)
treeb5d7b105f5a1410d46452962b6560e6755ea9c39 /wkhtmltopdf/views.py
parentab495712c73526b8f775c8e85c437085f1abcb1b (diff)
downloaddjango-wkhtmltopdf-2c6a5f64f060a4ebcb6166068b04202f9f007ec8.tar.gz
django-wkhtmltopdf-2c6a5f64f060a4ebcb6166068b04202f9f007ec8.tar.bz2
django-wkhtmltopdf-2c6a5f64f060a4ebcb6166068b04202f9f007ec8.zip
Refactor the main render method into a class based view
Use a PdfResponse to deal with the headers and response type. Make the margin_* and filename variables instance variables on the view with sane defaults.
Diffstat (limited to 'wkhtmltopdf/views.py')
-rw-r--r--wkhtmltopdf/views.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/wkhtmltopdf/views.py b/wkhtmltopdf/views.py
new file mode 100644
index 0000000..e2fee19
--- /dev/null
+++ b/wkhtmltopdf/views.py
@@ -0,0 +1,61 @@
+from os import remove
+from re import compile
+
+from django.conf import settings
+from django.contrib.sites.models import Site
+from django.template.response import HttpResponse
+from django.views.generic import TemplateView
+
+from wkhtmltopdf.utils import template_to_temp_file, wkhtmltopdf
+
+class PdfResponse(HttpResponse):
+ def __init__(self, content, filename):
+ super(PdfResponse, self).__init__(content, 'application/pdf')
+ self.__setitem__('Content-Disposition', 'attachment; filename=%s' % filename)
+
+
+class PdfTemplateView(TemplateView):
+ filename = 'rendered_pdf.pdf'
+ footer_template = None
+ header_template = None
+ margin_bottom = 0
+ margin_left = 0
+ margin_right = 0
+ margin_top = 0
+ response = PdfResponse
+
+ def get(self, request, context_instance=None, *args, **kwargs):
+ if request.GET.get('as', '') == 'html':
+ super(PdfTemplateView, self).get(request, *args, **kwargs)
+
+ page_path = template_to_temp_file(self.template_name, self.get_context_data(), context_instance)
+
+ tmp_files = []
+ if self.header_template:
+ kwargs['header_html'] = template_to_temp_file(self.header_template, self.get_context_data(), context_instance)
+ tmp_files.append(kwargs['header_html'])
+ if self.footer_template:
+ kwargs['footer_html'] = template_to_temp_file(self.footer_template, self.get_context_data(), context_instance)
+ tmp_files.append(kwargs['footer_html'])
+
+ map(remove, tmp_files)
+
+ kwargs.update({
+ 'margin_bottom': self.margin_bottom,
+ 'margin_left': self.margin_left,
+ 'margin_right': self.margin_right,
+ 'margin_top': self.margin_top
+ })
+ return self.response(wkhtmltopdf(page_path, **kwargs), self.filename)
+
+ def get_context_data(self, **kwargs):
+ context = super(PdfTemplateView, self).get_context_data(**kwargs)
+
+ match_full_url = compile(r'^https?://')
+ if not match_full_url.match(settings.STATIC_URL):
+ context['STATIC_URL'] = 'http://' + Site.objects.get_current().domain + settings.STATIC_URL
+ if not match_full_url.match(settings.STATIC_URL):
+ context['MEDIA_URL'] = 'http://' + Site.objects.get_current().domain + settings.MEDIA_URL
+
+ return context
+