Interestingly to render PDF file in Django you don’t need to create HTML template.
In this tutorial, we are going to setting up the static PDF file and render and allow user to downlow PDF file.
There are two ways to access the static file in the Django Python script. One is using static()
method. Another is using os.path.join()
method.
Here is the twist. You can not use the static file path you get from static()
method to open the file. If you use it, you will get an error saying…
FileNotFoundError Exception Value: [Errno 2] No such file or directory: '/static/sample.pdf'
So, use later one.
Here is the sample code to set a view (view.py) to render and open PDF file in Django.
from django.http import FileResponse
import os
def show_pdf(request):
filepath = os.path.join('static', 'sample.pdf')
return FileResponse(open(filepath, 'rb'), content_type='application/pdf')
Some of the points you should remember.
FileResponse
. You need to import it from django.http
before using.open()
method.FileResponse
content-type should be ‘application/pdf’.It is not good practice to hardcode the file path. File path of the static files can vary while deploying production build.
If you are getting FileNotFoundError
, check this tutorial where I have described steps to debug this issue.
Note: If you have a download manager installed on your system, it will start downloading PDF file rather than showing it in the browser. If you want to prevent users from downloading or saving PDFs, this is not a recommended solution.
There are many use cases to open pdf file in Django. For example, if you are building an eCommerce website, with this technique you can allow users to download the invoices for purchased products and services. You can also allow users to download the specific documentation files.
There are different methods to open PDF file in Django based on the use case. Here we have discussed the simplest one. If you have any queries, let me know in the comment.