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) %}