diff --git a/roles/printer/tasks/main.yml b/roles/printer/tasks/main.yml
index e8b16071cdab0ea4e5c47f129ff8894669c0f0d1..44579ea1c4f86f914b00c7d55c44ffd481c030f7 100644
--- a/roles/printer/tasks/main.yml
+++ b/roles/printer/tasks/main.yml
@@ -1,8 +1,13 @@
 ---
 - name: Pin Django from Debian bullseye-backports
   template:
-    src: "apt/sources.list.d/bullseye-backports.list.j2"
-    dest: "/etc/apt/sources.list.d/bullseye-backports.list"
+    src: "{{ item.src }}"
+    dest: "{{ item.dest }}"
+  loop:
+    - src: "apt/sources.list.d/bullseye-backports.list.j2"
+      dest: "/etc/apt/sources.list.d/bullseye-backports.list"
+    - src: "apt/preferences.d/django-backports.j2"
+      dest: "/etc/apt/preferences.d/django-backports"
 
 - name: Install printer dependencies
   apt:
@@ -31,6 +36,10 @@
   retries: 3
   until: apt_result is succeeded
 
+- name: Install non-packaged dependencies
+  pip:
+    name: crispy-bootstrap5==0.4
+
 - name: Create django-printer configuration directory
   file:
     path: "/etc/django-printer"
diff --git a/roles/printer/templates/apt/preferences.d/django-backports.j2 b/roles/printer/templates/apt/preferences.d/django-backports.j2
new file mode 100644
index 0000000000000000000000000000000000000000..83581f5b460899f15f560349f5242855d3c426b5
--- /dev/null
+++ b/roles/printer/templates/apt/preferences.d/django-backports.j2
@@ -0,0 +1,7 @@
+{{ ansible_header | comment }}
+
+
+Package: python3-django
+Pin: release n=bullseye-backports
+Pin-Priority: 900
+