From 2a9bb46e978bfbcc223cd49d0b1f1607c2c9361c Mon Sep 17 00:00:00 2001
From: Sli
Date: Sat, 28 Mar 2026 14:01:47 +0100
Subject: [PATCH 1/3] Fix 500 error on all broken pagination pages where `with
context` was missing
---
core/templates/core/file_moderation.jinja | 2 +-
core/templates/core/macros.jinja | 6 ++++++
counter/templates/counter/cash_summary_list.jinja | 3 ++-
counter/templates/counter/refilling_list.jinja | 2 +-
election/templates/election/election_list.jinja | 2 +-
forum/templates/forum/topic.jinja | 6 ++++--
rootplace/templates/rootplace/logs.jinja | 6 ++++--
7 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/core/templates/core/file_moderation.jinja b/core/templates/core/file_moderation.jinja
index fc9c0f43..f24ce731 100644
--- a/core/templates/core/file_moderation.jinja
+++ b/core/templates/core/file_moderation.jinja
@@ -10,7 +10,7 @@
{% extends "core/base.jinja" %}
{% endif %}
-{% from "core/macros.jinja" import paginate_htmx %}
+{% from "core/macros.jinja" import paginate_htmx with context %}
{% block title %}
{% trans %}File moderation{% endtrans %}
diff --git a/core/templates/core/macros.jinja b/core/templates/core/macros.jinja
index a6e9be5d..58ef38b2 100644
--- a/core/templates/core/macros.jinja
+++ b/core/templates/core/macros.jinja
@@ -124,6 +124,9 @@
This must be coupled with a view that handles pagination
with the Django Paginator object.
+ Warning:
+ You must include this macro `with context` as it uses the `querystring` macro
+
Parameters:
current_page (django.core.paginator.Page): the current page object
paginator (django.core.paginator.Paginator): the paginator object
@@ -139,6 +142,9 @@
The replaced fragment will be #content so make sure you are calling this macro inside your content block.
+ Warning:
+ You must include this macro `with context` as it uses the `querystring` macro
+
Parameters:
current_page (django.core.paginator.Page): the current page object
paginator (django.core.paginator.Paginator): the paginator object
diff --git a/counter/templates/counter/cash_summary_list.jinja b/counter/templates/counter/cash_summary_list.jinja
index 443c2085..ef4aafb2 100644
--- a/counter/templates/counter/cash_summary_list.jinja
+++ b/counter/templates/counter/cash_summary_list.jinja
@@ -1,5 +1,6 @@
{% extends "core/base.jinja" %}
-{% from 'core/macros.jinja' import user_profile_link, paginate_jinja %}
+{% from 'core/macros.jinja' import user_profile_link %}
+{% from 'core/macros.jinja' import paginate_jinja with context %}
{% block title %}
{% trans %}Cash register summary list{% endtrans %}
diff --git a/counter/templates/counter/refilling_list.jinja b/counter/templates/counter/refilling_list.jinja
index efdfcc23..a91152bc 100644
--- a/counter/templates/counter/refilling_list.jinja
+++ b/counter/templates/counter/refilling_list.jinja
@@ -1,5 +1,5 @@
{% extends "core/base.jinja" %}
-{% from "core/macros.jinja" import paginate_jinja %}
+{% from "core/macros.jinja" import paginate_jinja with context %}
{% block title %}
{%- trans %}Reloads list{% endtrans %} -- {{ counter.name }}
diff --git a/election/templates/election/election_list.jinja b/election/templates/election/election_list.jinja
index 1bbe6e07..c9bd8ce5 100644
--- a/election/templates/election/election_list.jinja
+++ b/election/templates/election/election_list.jinja
@@ -1,5 +1,5 @@
{% extends "core/base.jinja" %}
-{% from "core/macros.jinja" import paginate_jinja %}
+{% from "core/macros.jinja" import paginate_jinja with context %}
{% block title %}
{%- trans %}Election list{% endtrans %}
diff --git a/forum/templates/forum/topic.jinja b/forum/templates/forum/topic.jinja
index a95f47ef..bb9897b4 100644
--- a/forum/templates/forum/topic.jinja
+++ b/forum/templates/forum/topic.jinja
@@ -1,7 +1,7 @@
{% extends "core/base.jinja" %}
{% from 'core/macros.jinja' import user_profile_link %}
{% from 'forum/macros.jinja' import display_message, display_breadcrumb, display_search_bar %}
-{% from 'core/macros.jinja' import paginate_jinja %}
+{% from 'core/macros.jinja' import paginate_jinja with context %}
{% block title %}
{{ topic }}
@@ -44,7 +44,9 @@
{% trans %}Reply{% endtrans %}
- {{ paginate_jinja(msgs, msgs.paginator) }}
+ {% if is_paginated %}
+ {{ paginate_jinja(msgs, msgs.paginator) }}
+ {% endif %}
{% endblock %}
diff --git a/rootplace/templates/rootplace/logs.jinja b/rootplace/templates/rootplace/logs.jinja
index 134584e8..88540b8f 100644
--- a/rootplace/templates/rootplace/logs.jinja
+++ b/rootplace/templates/rootplace/logs.jinja
@@ -1,5 +1,5 @@
{% extends "core/base.jinja" %}
-{% from "core/macros.jinja" import paginate_jinja %}
+{% from "core/macros.jinja" import paginate_jinja with context %}
{% block title %}
{% trans %}Operation logs{% endtrans %}
@@ -28,5 +28,7 @@
- {{ paginate_jinja(page_obj, paginator) }}
+ {% if is_paginated %}
+ {{ paginate_jinja(page_obj, paginator) }}
+ {% endif %}
{% endblock content %}
\ No newline at end of file
From 71bfdf68b7e336667de8047d0a768614580ae050 Mon Sep 17 00:00:00 2001
From: Sli
Date: Sat, 28 Mar 2026 14:32:08 +0100
Subject: [PATCH 2/3] Use urlencode for querystring macro
---
core/templates/core/macros.jinja | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/core/templates/core/macros.jinja b/core/templates/core/macros.jinja
index 58ef38b2..a8034f29 100644
--- a/core/templates/core/macros.jinja
+++ b/core/templates/core/macros.jinja
@@ -124,8 +124,11 @@
This must be coupled with a view that handles pagination
with the Django Paginator object.
- Warning:
- You must include this macro `with context` as it uses the `querystring` macro
+ Warnings:
+ This macro must be imported with context :
+ ```jinja
+ {% from "core/macros.jinja" import paginate_jinja with context %}
+ ```
Parameters:
current_page (django.core.paginator.Page): the current page object
@@ -142,8 +145,11 @@
The replaced fragment will be #content so make sure you are calling this macro inside your content block.
- Warning:
- You must include this macro `with context` as it uses the `querystring` macro
+ Warnings:
+ This macro must be imported with context :
+ ```jinja
+ {% from "core/macros.jinja" import paginate_jinja with context %}
+ ```
Parameters:
current_page (django.core.paginator.Page): the current page object
@@ -254,14 +260,7 @@
{% macro querystring() %}
- {%- for key, values in request.GET.lists() -%}
- {%- if key not in kwargs -%}
- {%- for value in values -%}
- {{ key }}={{ value }}&
- {%- endfor -%}
- {%- endif -%}
- {%- endfor -%}
- {%- for key, value in kwargs.items() -%}
- {{ key }}={{ value }}&
- {%- endfor -%}
+ {%- set qs = request.GET.copy() -%}
+ {%- do qs.update(kwargs) -%}
+ {{- qs | urlencode -}}
{% endmacro %}
\ No newline at end of file
From a213bc058dee221df6a5baf740b5e9156b285305 Mon Sep 17 00:00:00 2001
From: Sli
Date: Sat, 28 Mar 2026 23:13:42 +0100
Subject: [PATCH 3/3] Add request argument to `paginate_jinja` and
`paginate_htmx`
---
core/templates/core/file_moderation.jinja | 4 +-
core/templates/core/macros.jinja | 38 +++++++------------
.../templates/counter/cash_summary_list.jinja | 5 +--
.../templates/counter/refilling_list.jinja | 4 +-
.../templates/election/election_list.jinja | 4 +-
forum/templates/forum/topic.jinja | 6 +--
rootplace/templates/rootplace/logs.jinja | 4 +-
7 files changed, 27 insertions(+), 38 deletions(-)
diff --git a/core/templates/core/file_moderation.jinja b/core/templates/core/file_moderation.jinja
index f24ce731..ba9d03d4 100644
--- a/core/templates/core/file_moderation.jinja
+++ b/core/templates/core/file_moderation.jinja
@@ -10,7 +10,7 @@
{% extends "core/base.jinja" %}
{% endif %}
-{% from "core/macros.jinja" import paginate_htmx with context %}
+{% from "core/macros.jinja" import paginate_htmx %}
{% block title %}
{% trans %}File moderation{% endtrans %}
@@ -48,6 +48,6 @@
>{% trans %}Delete{% endtrans %}
{% endfor %}
- {{ paginate_htmx(page_obj, paginator) }}
+ {{ paginate_htmx(request, page_obj, paginator) }}
{% endblock %}
diff --git a/core/templates/core/macros.jinja b/core/templates/core/macros.jinja
index a8034f29..b39ae6d3 100644
--- a/core/templates/core/macros.jinja
+++ b/core/templates/core/macros.jinja
@@ -118,26 +118,21 @@
{% endmacro %}
-{% macro paginate_jinja(current_page, paginator) %}
+{% macro paginate_jinja(request, current_page, paginator) %}
{# Add pagination buttons for pages without Alpine.
This must be coupled with a view that handles pagination
with the Django Paginator object.
- Warnings:
- This macro must be imported with context :
- ```jinja
- {% from "core/macros.jinja" import paginate_jinja with context %}
- ```
-
Parameters:
+ request (django.http.request.HttpRequest): the current django request
current_page (django.core.paginator.Page): the current page object
paginator (django.core.paginator.Paginator): the paginator object
#}
- {{ paginate_server_side(current_page, paginator, False) }}
+ {{ paginate_server_side(request, current_page, paginator, False) }}
{% endmacro %}
-{% macro paginate_htmx(current_page, paginator) %}
+{% macro paginate_htmx(request, current_page, paginator) %}
{# Add pagination buttons for pages without Alpine but supporting fragments.
This must be coupled with a view that handles pagination
@@ -145,31 +140,26 @@
The replaced fragment will be #content so make sure you are calling this macro inside your content block.
- Warnings:
- This macro must be imported with context :
- ```jinja
- {% from "core/macros.jinja" import paginate_jinja with context %}
- ```
-
Parameters:
+ request (django.http.request.HttpRequest): the current django request
current_page (django.core.paginator.Page): the current page object
paginator (django.core.paginator.Paginator): the paginator object
#}
- {{ paginate_server_side(current_page, paginator, True) }}
+ {{ paginate_server_side(request, current_page, paginator, True) }}
{% endmacro %}
-{% macro paginate_server_side(current_page, paginator, use_htmx) %}
+{% macro paginate_server_side(request, current_page, paginator, use_htmx) %}