A django app to render django templates as PDF files.
Project description
django-renderpdf is a Django app to render django templates as PDF files.
Introduction
Rendering PDFs for web developers is generally pretty non-trivial, and there’s no common approach to doing this. django-renderpdf attempts to allow reusing all the known tools and skills when generating a PDF file in a Django app:
Use Django template files, which are internally rendered as HTML and them PDF files.
Use staticfiles app to include any CSS or image files.
Simply subclass a PDFView class which has an interface very similar to Django’s own built-in View classes.
Background
django-renderpdf actually started out as code on multiple of my own projects (including some public ones).
After some time, it became clear that I’d been copy-pasting PDF-related bits across different projects, and since co-workers expressed interest in this design (using the Django templating system to generate PDFs), it finally made sense to move this into a separate library.
Because of this, documentation is still a work in progress (the code far outdates this API being public), and while unit tests are lacking, this code has had ample field testing.
Usage example
Hint: Though PDFView’s methods has extensive docstrings you should check.
Let’s assume we have some Shipment object, and we want to print PDF labels for it. Here’s a usage code example for a view that does that.
from django.contrib.auth.mixins import LoginRequiredMixin
from django_renderpdf.views import PDFView
class LabelsView(LoginRequiredMixin, PDFView):
"""Generate labels for some Shipments.
A PDFView behaves pretty much like a TemplateView, so you can treat it as such.
"""
template_name = 'my_app/labels.html'
def get_context_data(self, *args, **kwargs):
"""Pass some extra context to the template."""
context = super().get_context_data(*args, **kwargs)
context['shipments'] = models.Shipment.objects.filter(
batch_id=kwargs['pk'],
)
return context
And in urls.py:
from django.urls import path
path(
'/shipments/labels/<int:pk>/',
views.LabelsView.as_view(),
name='shipment_labels',
),
Changelog
v2.1.0
Add handling of relative URLs. CSS, image files, and other resources will be resolved using Django’s internal URL routing. This includes scenarios like serving static or media files via Django, or serving thing like custom css via custom Django views.
Drop support for Python 3.5.
v2.0.1
Improve handling of remote staticfiles.
v2.0.0
Support Python 3.7 and 3.8.
Support Django 2.2, 3.0 and 3.1.
Drop support for Django < 2.2.
Licence
django-renderpdf is licensed under the ISC licence. See LICENCE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_renderpdf-2.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6cbed396d3b763a9a0507b8c17d74ebde760c716f1269bf50b60f4571a5793f0 |
|
MD5 | de83feb59c327a5481a0e6fe87fcd757 |
|
BLAKE2b-256 | 6fdd383d1e1f087013fb45346fc8dcebe1215ccd195de64212119fe0f5864969 |