From 26b83f7c5a21d93fecb2f7430ad46195d13f0d90 Mon Sep 17 00:00:00 2001 From: Bibek Date: Wed, 13 May 2026 23:20:05 -0400 Subject: [PATCH] Fixed slice filter adding fill_with to every slice when evenly divisible --- CHANGES.rst | 3 +++ src/jinja2/filters.py | 6 +++++- tests/test_filters.py | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 338dc9966..8d050d22b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -13,6 +13,9 @@ Unreleased - Use modern packaging metadata with ``pyproject.toml`` instead of ``setup.cfg``. :pr:`1793` - Use ``flit_core`` instead of ``setuptools`` as build backend. +- Fix the ``slice`` filter incorrectly appending ``fill_with`` to every + slice when the iterable length is evenly divisible by the slice count. + :issue:`2118` Version 3.1.6 diff --git a/src/jinja2/filters.py b/src/jinja2/filters.py index c46e20c10..1d87cc1dd 100644 --- a/src/jinja2/filters.py +++ b/src/jinja2/filters.py @@ -1089,7 +1089,11 @@ def sync_do_slice( end = offset + (slice_number + 1) * items_per_slice tmp = seq[start:end] - if fill_with is not None and slice_number >= slices_with_extra: + if ( + fill_with is not None + and slices_with_extra + and slice_number >= slices_with_extra + ): tmp.append(fill_with) yield tmp diff --git a/tests/test_filters.py b/tests/test_filters.py index 4601469a6..40ba8fcd5 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -78,6 +78,11 @@ def test_slice(self, env): "[[0, 1, 2, 3], [4, 5, 6, 'X'], [7, 8, 9, 'X']]" ) + def test_slice_fill_with_evenly_divisible(self, env): + tmpl = env.from_string("{{ foo|slice(4, 'X')|list }}") + out = tmpl.render(foo=list(range(4))) + assert out == "[[0], [1], [2], [3]]" + def test_escape(self, env): tmpl = env.from_string("""{{ '<">&'|escape }}""") out = tmpl.render()