From 09859a7b1d86c3e5c3ce9459e011c570686dd3b0 Mon Sep 17 00:00:00 2001 From: "Oscar L. aka moas" Date: Sun, 3 Sep 2017 13:30:28 +0200 Subject: [PATCH 1/5] add html params --- django_pdfkit/tests/test_views.py | 2 +- django_pdfkit/tests/urls.py | 23 ++++++++++++++++++++--- django_pdfkit/views.py | 5 ++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/django_pdfkit/tests/test_views.py b/django_pdfkit/tests/test_views.py index 638fb69..7a67d9c 100644 --- a/django_pdfkit/tests/test_views.py +++ b/django_pdfkit/tests/test_views.py @@ -75,7 +75,7 @@ def test_html(client): """ Test that the query string parameter ?html outputs HTML. """ - response = client.get('%s?html' % reverse('pdf')) + response = client.get('%s' % reverse('html')) with open(os.path.join(TESTS_TEMPLATE_DIR, 'basic.html'), 'rb') as basic_file: expected = basic_file.read() assert response.content == expected diff --git a/django_pdfkit/tests/urls.py b/django_pdfkit/tests/urls.py index 605dc8e..bf89b08 100644 --- a/django_pdfkit/tests/urls.py +++ b/django_pdfkit/tests/urls.py @@ -4,7 +4,24 @@ from django_pdfkit.views import PDFView urlpatterns = [ # pylint: disable=invalid-name - url(r'^pdf/', PDFView.as_view(template_name='basic.html'), name='pdf'), - url(r'^pdf-inline/', PDFView.as_view(inline=True, template_name='basic.html'), name='pdf-inline'), - url(r'^pdf-filename/', PDFView.as_view(filename='foo.pdf', template_name='basic.html'), name='pdf-filename'), + url( + r'^pdf/', + PDFView.as_view(template_name='basic.html', html=False), + name='pdf' + ), + url( + r'^pdf-inline/', + PDFView.as_view(inline=True, template_name='basic.html', html=False), + name='pdf-inline' + ), + url( + r'^pdf-filename/', + PDFView.as_view(filename='foo.pdf', template_name='basic.html', html=False), + name='pdf-filename' + ), + url( + r'^html/', + PDFView.as_view(template_name='basic.html'), + name='html' + ), ] diff --git a/django_pdfkit/views.py b/django_pdfkit/views.py index 7f0797f..b27769c 100644 --- a/django_pdfkit/views.py +++ b/django_pdfkit/views.py @@ -28,13 +28,16 @@ class PDFView(TemplateView): #: Set pdfkit options dict. pdfkit_options = None + #: Set to false if you don't want render html + html = True + def get(self, request, *args, **kwargs): """ Return a HTTPResponse either of a PDF file or HTML. :rtype: HttpResponse """ - if 'html' in request.GET: + if self.html is True: # Output HTML content = self.render_html(*args, **kwargs) return HttpResponse(content) From d3305d21a1395653214ebf5f137cddb1965408aa Mon Sep 17 00:00:00 2001 From: "Oscar L. aka moas" Date: Sun, 3 Sep 2017 13:30:50 +0200 Subject: [PATCH 2/5] re-order imports --- django_pdfkit/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/django_pdfkit/views.py b/django_pdfkit/views.py index b27769c..7a3eee4 100644 --- a/django_pdfkit/views.py +++ b/django_pdfkit/views.py @@ -8,14 +8,16 @@ from __future__ import absolute_import, print_function, unicode_literals import os + from os.path import basename, splitext +import pdfkit + from django.conf import settings from django.http import HttpResponse from django.template import loader from django.test import override_settings from django.views.generic import TemplateView -import pdfkit class PDFView(TemplateView): From 46514546a40b3691a9edf5d2f7c01c476ed05433 Mon Sep 17 00:00:00 2001 From: "Oscar L. aka moas" Date: Sun, 3 Sep 2017 13:31:31 +0200 Subject: [PATCH 3/5] use pdfkit_options to override default options --- django_pdfkit/views.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/django_pdfkit/views.py b/django_pdfkit/views.py index 7a3eee4..710d4dd 100644 --- a/django_pdfkit/views.py +++ b/django_pdfkit/views.py @@ -84,13 +84,10 @@ def get_pdfkit_options(self): :rtype: dict """ + options = {'page-size': 'A4', 'encoding': 'UTF-8'} if self.pdfkit_options is not None: - return self.pdfkit_options - - return { - 'page-size': 'A4', - 'encoding': 'UTF-8', - } + options.update(self.pdfkit_options) + return options def get_filename(self): """ From 2d6ccc3ef9ec5f323e77e686b8cf74877ff68971 Mon Sep 17 00:00:00 2001 From: "Oscar L. aka moas" Date: Sun, 3 Sep 2017 13:32:12 +0200 Subject: [PATCH 4/5] method has not positional arg --- django_pdfkit/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_pdfkit/views.py b/django_pdfkit/views.py index 710d4dd..b1225a6 100644 --- a/django_pdfkit/views.py +++ b/django_pdfkit/views.py @@ -112,6 +112,6 @@ def render_html(self, *args, **kwargs): with override_settings(STATIC_URL=static_url, MEDIA_URL=media_url): template = loader.get_template(self.template_name) - context = self.get_context_data(*args, **kwargs) + context = self.get_context_data(**kwargs) html = template.render(context) return html From bc0ca79760f218e7ba68c4026f9447b195371c24 Mon Sep 17 00:00:00 2001 From: "Oscar L. aka moas" Date: Sun, 3 Sep 2017 13:37:01 +0200 Subject: [PATCH 5/5] adapt docs --- docs/usage.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/usage.rst b/docs/usage.rst index 7edaa59..b43d1fd 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -10,7 +10,7 @@ Simply use the class based ``PDFView`` which is a drop in replacement for ``Temp from django_pdfkit import PDFView ... - url(r'^my-pdf/$', PDFView.as_view(template_name='my-pdf.html'), name='my-pdf'), + url(r'^my-pdf/$', PDFView.as_view(template_name='my-pdf.html', html=False), name='my-pdf'), ... @@ -29,8 +29,6 @@ The following query parameters can adjust the views behaviour. - ``inline`` - don't set the ``CONTENT-DISPOSITION`` header, causing the PDF to be displayed inline if the browser supports it. - ``download`` - set the ``CONTENT-DISPOSITION`` header (default). -- ``html`` - don't render as a PDF, render as HTML, useful for debugging your - HTML output. - ``debug`` - turn on debug mode when calling pdfkit - only works when ``settings.DEBUG`` is ``True``. @@ -44,6 +42,7 @@ Define any of the following properties either as a kwarg to ``PDFView.as_view`` or as a property on the view. - ``filename`` - set the downloadable filename. +- ``html`` - set to false to render pdf. - ``inline`` - default to display PDF inline, can be overridden with the ``download`` query string parameter.