Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ from django_tex.shortcuts import render_to_pdf
def view(request):
template_name = 'test.tex'
context = {'foo': 'Bar'}
return render_to_pdf(request, template_name, context, filename='test.pdf')
return render_to_pdf(request, template_name, context, as_attachment=True, filename='test.pdf')
```

## Some notes on usage
Expand Down
9 changes: 7 additions & 2 deletions django_tex/response.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@


class PDFResponse(HttpResponse):
def __init__(self, content, filename=None):
def __init__(self, content, as_attachment=False, filename=None):
super(PDFResponse, self).__init__(content_type="application/pdf")
self["Content-Disposition"] = 'filename="{}"'.format(filename)
if filename:
disposition = "attachment" if as_attachment else "inline"
file_expr = 'filename="{}"'.format(filename)
self["Content-Disposition"] = "{}; {}".format(disposition, file_expr)
elif as_attachment:
self["Content-Disposition"] = "attachment"
self.write(content)
4 changes: 2 additions & 2 deletions django_tex/shortcuts.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django_tex.response import PDFResponse


def render_to_pdf(request, template_name, context=None, filename=None):
def render_to_pdf(request, template_name, context=None, as_attachment=False, filename=None):
# Request is not needed and only included to make the signature conform to django's render function
pdf = compile_template_to_pdf(template_name, context)
return PDFResponse(pdf, filename=filename)
return PDFResponse(pdf, as_attachment=as_attachment, filename=filename)
23 changes: 22 additions & 1 deletion tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,4 +359,25 @@ def test_render_to_pdf(self):
response = render_to_pdf(request, template_name, context, filename="test.pdf")
self.assertIsInstance(response, HttpResponse)
self.assertEqual(response["Content-Type"], "application/pdf")
self.assertEqual(response["Content-Disposition"], 'filename="test.pdf"')
self.assertEqual(response["Content-Disposition"], 'inline; filename="test.pdf"')

def test_render_to_pdf_content_dispositions(self):
request = None # request is only needed to make the signature of render_to_pdf similar to the signature of django's render function
template_name = "tests/test.tex"
context = {
"test": "a simple test",
"number": Decimal("1000.10"),
"date": datetime.date(2017, 10, 25),
"names": ["Arjen", "Robert", "Mats"],
}
response = render_to_pdf(request, template_name, context, filename="test.pdf")
self.assertEqual(response["Content-Disposition"], 'inline; filename="test.pdf"')

response = render_to_pdf(request, template_name, context, as_attachment=True, filename="test.pdf")
self.assertEqual(response["Content-Disposition"], 'attachment; filename="test.pdf"')

response = render_to_pdf(request, template_name, context, as_attachment=True)
self.assertEqual(response["Content-Disposition"], 'attachment')

response = render_to_pdf(request, template_name, context)
self.assertFalse("Content-Disposition" in response)