How to show a PDF file in a Django view? How to show a PDF file in a Django view? python python

How to show a PDF file in a Django view?


Django has a class specifically for returning files, FileResponse. It streams files, so that you don't have to read the entire file into memory before returning it. Here you go:

from django.http import FileResponse, Http404def pdf_view(request):    try:        return FileResponse(open('foobar.pdf', 'rb'), content_type='application/pdf')    except FileNotFoundError:        raise Http404()

If you have really large files or if you're doing this a lot, a better option would probably be to serve these files outside of Django using normal server configuration.


Simplistically, if you have a PDF file and you want to output it through a Django view, all you need to do is dump the file contents into the response and send it with the appropriate mimetype.

def pdf_view(request):    with open('/path/to/my/file.pdf', 'r') as pdf:        response = HttpResponse(pdf.read(), mimetype='application/pdf')        response['Content-Disposition'] = 'inline;filename=some_file.pdf'        return response    pdf.closed

You can probably just return the response directly without specifying Content-Disposition, but that better indicates your intention and also allows you specify the filename just in case the user decides to save it.

Also, note that the view above doesn't handle the scenario where the file cannot be opened or read for whatever reason. Since it's done with with, it won't raise any exceptions, but you still must return some sort of response. You could simply raise an Http404 or something, though.


If you are working on a Windows machine pdf must be opened as rb not r.

def pdf_view(request):    with open('/path / to /name.pdf', 'rb') as pdf:        response = HttpResponse(pdf.read(),content_type='application/pdf')        response['Content-Disposition'] = 'filename=some_file.pdf'        return response