Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-crispy-bootstrap5 for
openSUSE:Factory checked in at 2026-03-05 17:15:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-crispy-bootstrap5 (Old)
and /work/SRC/openSUSE:Factory/.python-crispy-bootstrap5.new.561 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-crispy-bootstrap5"
Thu Mar 5 17:15:19 2026 rev:7 rq:1336606 version:2026.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-crispy-bootstrap5/python-crispy-bootstrap5.changes
2025-10-03 15:44:21.746864243 +0200
+++
/work/SRC/openSUSE:Factory/.python-crispy-bootstrap5.new.561/python-crispy-bootstrap5.changes
2026-03-05 17:18:35.751214607 +0100
@@ -1,0 +2,9 @@
+Wed Mar 4 22:24:14 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 2026.3:
+ * Confirmed support for Django 6.0.
+ * Dropped support for Django 4.2, 5.0 and 5.1.
+ * Added support for Python 3.14.
+ * Dropped support for Python 3.8 and 3.9.
+
+-------------------------------------------------------------------
Old:
----
crispy-bootstrap5-2025.6.tar.gz
New:
----
crispy-bootstrap5-2026.3.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-crispy-bootstrap5.spec ++++++
--- /var/tmp/diff_new_pack.ZeUALF/_old 2026-03-05 17:18:36.407241757 +0100
+++ /var/tmp/diff_new_pack.ZeUALF/_new 2026-03-05 17:18:36.411241922 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-crispy-bootstrap5
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-crispy-bootstrap5
-Version: 2025.6
+Version: 2026.3
Release: 0
Summary: Bootstrap5 template pack for django-crispy-forms
License: MIT
++++++ crispy-bootstrap5-2025.6.tar.gz -> crispy-bootstrap5-2026.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/.github/workflows/publish.yml
new/crispy-bootstrap5-2026.3/.github/workflows/publish.yml
--- old/crispy-bootstrap5-2025.6/.github/workflows/publish.yml 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/.github/workflows/publish.yml 2026-03-01
11:05:35.000000000 +0100
@@ -12,12 +12,11 @@
fail-fast: false
matrix:
python-version:
- - "3.8"
- - "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
+ - "3.14"
steps:
- uses: actions/checkout@v3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/.github/workflows/test.yml
new/crispy-bootstrap5-2026.3/.github/workflows/test.yml
--- old/crispy-bootstrap5-2025.6/.github/workflows/test.yml 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/.github/workflows/test.yml 2026-03-01
11:05:35.000000000 +0100
@@ -14,12 +14,11 @@
fail-fast: false
matrix:
python-version:
- - "3.8"
- - "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
+ - "3.14"
steps:
- uses: actions/checkout@v3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/CHANGELOG.md
new/crispy-bootstrap5-2026.3/CHANGELOG.md
--- old/crispy-bootstrap5-2025.6/CHANGELOG.md 2025-06-08 09:38:56.000000000
+0200
+++ new/crispy-bootstrap5-2026.3/CHANGELOG.md 2026-03-01 11:05:35.000000000
+0100
@@ -1,5 +1,11 @@
# CHANGELOG FOR CRISPY-BOOTSTRAP5
+## 2026.3 (2026-03-01)
+* Confirmed support for Django 6.0.
+* Dropped support for Django 4.2, 5.0 and 5.1.
+* Added support for Python 3.14.
+* Dropped support for Python 3.8 and 3.9.
+
## 2025.6 (2025-06-08)
* `<legend>` elements now have `fs-6` class so they are the same font size as
`<labels>`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/__init__.py
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/__init__.py
--- old/crispy-bootstrap5-2025.6/crispy_bootstrap5/__init__.py 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/crispy_bootstrap5/__init__.py 2026-03-01
11:05:35.000000000 +0100
@@ -1 +1 @@
-__version__ = "2025.6"
+__version__ = "2026.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/field_errors.html
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/field_errors.html
---
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/field_errors.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/field_errors.html
2026-03-01 11:05:35.000000000 +0100
@@ -1,10 +1,5 @@
{% if form_show_errors and field.errors %}
- {% if field.errors.field_id %}
- {# Django 5.2+ #}
- <div id="{{field.errors.field_id}}_error" class="invalid-feedback">
- {% else %}
- <div id="{{field.auto_id}}_error" class="invalid-feedback">
- {% endif %}
+ <div id="{{field.errors.field_id}}_error" class="invalid-feedback">
{% for error in field.errors %}
<span id="error_{{ forloop.counter }}_{{ field.auto_id }}"><strong>{{
error }}</strong></span>
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/field_errors_block.html
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/field_errors_block.html
---
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/field_errors_block.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/field_errors_block.html
2026-03-01 11:05:35.000000000 +0100
@@ -1,10 +1,5 @@
{% if form_show_errors and field.errors %}
- {% if field.errors.field_id %}
- {# Django 5.2+ #}
- <div id="{{field.errors.field_id}}_error"class="invalid-feedback">
- {% else %}
- <div id="{{field.auto_id}}_error" class="invalid-feedback">
- {% endif %}
+ <div id="{{field.errors.field_id}}_error" class="invalid-feedback">
{% for error in field.errors %}
<p id="error_{{ forloop.counter }}_{{ field.auto_id }}"><strong>{{
error }}</strong></p>
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/field_with_buttons.html
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/field_with_buttons.html
---
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/field_with_buttons.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/field_with_buttons.html
2026-03-01 11:05:35.000000000 +0100
@@ -24,16 +24,13 @@
{% endif %}
{{ buttons|safe }}
</div>
- {% if field.errors.field_id %}
- {# Django 5.2+ #}
- <div id="{{field.errors.field_id}}_error">
- {% else %}
- <div id="{{field.auto_id}}_error">
- {% endif %}
+ {% if field.errors %}
+ <div id="{{field.errors.field_id}}_error">
{% for error in field.errors %}
<p id="error_{{ forloop.counter }}_{{ field.auto_id }}"
class="text-danger mb-0"><small><strong>{{ error }}</strong></small></p>
{% endfor %}
</div>
+ {% endif %}
{% include 'bootstrap5/layout/help_text.html' %}
</div>
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/multifield.html
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/multifield.html
---
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/multifield.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/multifield.html
2026-03-01 11:05:35.000000000 +0100
@@ -1,27 +1,3 @@
-{% load crispy_forms_field %}
-
-{% if field.is_hidden %}
- {{ field }}
-{% else %}
-
- {% if field.label %}
- <label for="{{ field.id_for_label }}"{% if labelclass %} class="{{
labelclass }}"{% endif %}>
- {% endif %}
-
- {% if field|is_checkbox %}
- {% crispy_field field %}
- {% endif %}
-
- {% if field.label %}
- {{ field.label }}
- {% endif %}
-
- {% if not field|is_checkbox %}
- {% crispy_field field %}
- {% endif %}
-
- {% if field.label %}
- </label>
- {% endif %}
-
-{% endif %}
+<div class="d-flex gap-2">
+ {{ fields_output }}
+</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/radio_checkbox_select.html
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/radio_checkbox_select.html
---
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/layout/radio_checkbox_select.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/layout/radio_checkbox_select.html
2026-03-01 11:05:35.000000000 +0100
@@ -20,12 +20,7 @@
</div>
{% if field.errors and inline_class %}
- {% if field.errors.field_id %}
- {# Django 5.2+ #}
- <div id="{{field.errors.field_id}}_error" class="invalid-feedback">
- {% else %}
- <div id="{{field.auto_id}}_error" class="invalid-feedback">
- {% endif %}
+ <div id="{{field.errors.field_id}}_error" class="invalid-feedback">
{% for error in field.errors %}
<p id="error_{{ forloop.counter }}_{{ field.auto_id }}"><strong>{{
error }}</strong></p>
{% endfor %}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/multifield.html
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/multifield.html
---
old/crispy-bootstrap5-2025.6/crispy_bootstrap5/templates/bootstrap5/multifield.html
1970-01-01 01:00:00.000000000 +0100
+++
new/crispy-bootstrap5-2026.3/crispy_bootstrap5/templates/bootstrap5/multifield.html
2026-03-01 11:05:35.000000000 +0100
@@ -0,0 +1 @@
+<div>{% include 'bootstrap5/field.html' %}</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/pyproject.toml
new/crispy-bootstrap5-2026.3/pyproject.toml
--- old/crispy-bootstrap5-2025.6/pyproject.toml 2025-06-08 09:38:56.000000000
+0200
+++ new/crispy-bootstrap5-2026.3/pyproject.toml 2026-03-01 11:05:35.000000000
+0100
@@ -1,32 +1,26 @@
[build-system]
build-backend = "setuptools.build_meta"
-requires = [
- "setuptools>=61",
-]
+requires = ["setuptools>=77.0.3"]
[project]
name="crispy-bootstrap5"
description="Bootstrap5 template pack for django-crispy-forms"
readme = "README.md"
-license = {text = "MIT"}
+license = "MIT"
authors = [{name = "David Smith"}]
-requires-python = ">=3.8"
+requires-python = ">=3.9"
classifiers=[
"Environment :: Web Environment",
"Framework :: Django",
- "Framework :: Django :: 4.2",
- "Framework :: Django :: 5.0",
- "Framework :: Django :: 5.1",
"Framework :: Django :: 5.2",
- "License :: OSI Approved :: MIT License",
+ "Framework :: Django :: 6.0",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3 :: Only",
- "Programming Language :: Python :: 3.8",
- "Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Software Development :: Libraries :: Python Modules",
@@ -38,11 +32,16 @@
"django>=4.2",
"django-crispy-forms>=2.3",
]
-[project.optional-dependencies]
+[dependency-groups]
test = [
"pytest",
"pytest-django",
]
+lint = [
+ "black",
+ "isort",
+ "flake8",
+]
[project.urls]
"CI" = "https://github.com/django-crispy-forms/crispy-bootstrap5/actions"
"Changelog" =
"https://github.com/django-crispy-forms/crispy-bootstrap5/releases"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons.html
new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons.html
--- old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons.html
2026-03-01 11:05:35.000000000 +0100
@@ -7,7 +7,6 @@
<input class="form-control inputtext textInput textinput"
id="id_email" aria-describedby="id_email_helptext"
maxlength="30" name="email"
required type="text">
<a class="btn btn-primary"
role="button">click me</a></div>
- <div id="id_email_error"></div>
<div class="form-text"
id="id_email_helptext">Insert your email</div>
</div>
</div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-<form method="post">
- <div class=" col-md">
- <div class="mb-3"><label class=" form-label requiredField"
for="id_email">Email<span
- class="asteriskField">*</span></label>
- <div>
- <div class="input-group"><input
class="form-control inputtext is-invalid textInput textinput"
- id="id_email" maxlength="20"
name="email" required type="text"><button
- class="btn
btn-outline-secondary" type="button">Go!</button></div>
- <div id="id_email_error">
- <p class="mb-0 text-danger"
id="error_1_id_email"><small><strong>This field is
required.</strong></small></p>
- </div>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-<form method="post">
- <div class=" col-md">
- <div class="mb-3"><label class=" form-label requiredField"
for="id_email">Email<span
- class="asteriskField">*</span></label>
- <div>
- <div class="input-group"><input
class="form-control inputtext is-invalid textInput textinput"
- id="id_email" maxlength="20"
name="email" required type="text" aria-invalid="true"><button
- class="btn
btn-outline-secondary" type="button">Go!</button></div>
- <div id="id_email_error">
- <p class="mb-0 text-danger"
id="error_1_id_email"><small><strong>This field is
required.</strong></small></p>
- </div>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons_lt50.html
--- old/crispy-bootstrap5-2025.6/tests/results/field_with_buttons_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/field_with_buttons_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-<form method="post">
- <div class=" col-md">
- <div class="mb-3"><label class=" form-label requiredField"
for="id_email">email<span
- class="asteriskField">*</span></label>
- <div>
- <div class="input-group">
- <input class="form-control inputtext textInput textinput"
id="id_email"
- maxlength="30" name="email"
required type="text">
- <a class="btn btn-primary"
role="button">click me</a></div>
- <div id="id_email_error"></div>
- <div class="form-text" id="id_email_helptext">Insert your
email</div>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/help_text_escape_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/help_text_escape_lt50.html
--- old/crispy-bootstrap5-2025.6/tests/results/help_text_escape_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/help_text_escape_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +0,0 @@
-<div class="mb-3" id="div_id_email"><label class="form-label requiredField"
for="id_email">email<span
- class="asteriskField">*</span></label><input class="form-control
inputtext textInput textinput"
- id="id_email" name="email" required type="text" maxlength="320"><div
class="form-text" id="id_email_helptext">Insert
- your <b>email</b></div>
-</div>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/inline_checkboxes_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/inline_checkboxes_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/inline_checkboxes_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/inline_checkboxes_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-<form method="post">
- <div id="div_id_checkboxes" class="mb-3">
- <fieldset>
- <legend for="" class=" form-label fs-6 requiredField">Checkboxes<span
class="asteriskField">*</span></legend>
- <div>
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input is-invalid"
name="checkboxes" value="1" id="id_checkboxes_0">
- <label for="id_checkboxes_0" class="form-check-label">Option
one</label>
- </div>
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input is-invalid"
name="checkboxes" value="2" id="id_checkboxes_1">
- <label for="id_checkboxes_1" class="form-check-label">Option
two</label>
- </div>
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input is-invalid"
name="checkboxes" value="3" id="id_checkboxes_2">
- <label for="id_checkboxes_2" class="form-check-label">Option
three</label>
- </div>
- </div>
- <div id="id_checkboxes_error" class="invalid-feedback">
- <p id="error_1_id_checkboxes"><strong>This field is
required.</strong></p>
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/inline_checkboxes_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/inline_checkboxes_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/inline_checkboxes_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/inline_checkboxes_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-<form method="post">
- <div id="div_id_checkboxes" class="mb-3">
- <fieldset>
- <legend for="" class=" form-label fs-6 requiredField">Checkboxes<span
class="asteriskField">*</span></legend>
- <div>
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input is-invalid"
name="checkboxes" value="1" id="id_checkboxes_0" aria-invalid="true">
- <label for="id_checkboxes_0" class="form-check-label">Option
one</label>
- </div>
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input is-invalid"
name="checkboxes" value="2" id="id_checkboxes_1" aria-invalid="true">
- <label for="id_checkboxes_1" class="form-check-label">Option
two</label>
- </div>
- <div class="form-check form-check-inline">
- <input type="checkbox" class="form-check-input is-invalid"
name="checkboxes" value="3" id="id_checkboxes_2" aria-invalid="true">
- <label for="id_checkboxes_2" class="form-check-label">Option
three</label>
- </div>
- </div>
- <div id="id_checkboxes_error" class="invalid-feedback">
- <p id="error_1_id_checkboxes"><strong>This field is
required.</strong></p>
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/inline_radios_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/inline_radios_failing_lt50.html
--- old/crispy-bootstrap5-2025.6/tests/results/inline_radios_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/inline_radios_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-<form method="post" >
- <div id="div_id_inline_radios" class="mb-3">
- <fieldset>
- <legend for="" class=" form-label fs-6 requiredField">Inline
radios<span class="asteriskField">*</span></legend>
- <div>
- <div class="form-check form-check-inline">
- <input type="radio" class="form-check-input is-invalid"
name="inline_radios" value="option_one" id="id_inline_radios_0" required>
- <label for="id_inline_radios_0"
class="form-check-label">Option one</label>
- </div>
- <div class="form-check form-check-inline">
- <input type="radio" class="form-check-input is-invalid"
name="inline_radios" value="option_two" id="id_inline_radios_1" required>
- <label for="id_inline_radios_1"
class="form-check-label">Option two</label>
- </div>
- </div>
- <div id="id_inline_radios_error" class="invalid-feedback">
- <p id="error_1_id_inline_radios"><strong>This field is
required.</strong></p>
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/inline_radios_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/inline_radios_failing_lt52.html
--- old/crispy-bootstrap5-2025.6/tests/results/inline_radios_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/inline_radios_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-<form method="post" >
- <div id="div_id_inline_radios" class="mb-3">
- <fieldset>
- <legend for="" class=" form-label fs-6 requiredField">Inline
radios<span class="asteriskField">*</span></legend>
- <div>
- <div class="form-check form-check-inline">
- <input type="radio" class="form-check-input is-invalid"
name="inline_radios" value="option_one" id="id_inline_radios_0" required
aria-invalid="true">
- <label for="id_inline_radios_0"
class="form-check-label">Option one</label>
- </div>
- <div class="form-check form-check-inline">
- <input type="radio" class="form-check-input is-invalid"
name="inline_radios" value="option_two" id="id_inline_radios_1" required
aria-invalid="true">
- <label for="id_inline_radios_1"
class="form-check-label">Option two</label>
- </div>
- </div>
- <div id="id_inline_radios_error" class="invalid-feedback">
- <p id="error_1_id_inline_radios"><strong>This field is
required.</strong></p>
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_bootstrap5_form_inline_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_bootstrap5_form_inline_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_bootstrap5_form_inline_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_bootstrap5_form_inline_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-<form class="row row-cols-lg-auto" method="post">
- <div id="div_id_email">
- <label class="visually-hidden" for="id_email">
- email
- </label><input class="form-control inputtext textInput textinput"
id="id_email" maxlength="30" name="email"
- placeholder="email" required type="text">
- </div>
- <div id="div_id_password1">
- <label class="visually-hidden" for="id_password1">
- password
- </label><input class="form-control textInput textinput"
id="id_password1" maxlength="30" name="password1"
- placeholder="password" required type="password">
- </div>
- <div id="div_id_last_name">
- <label class="visually-hidden" for="id_last_name">
- last name
- </label><input class="form-control inputtext textInput textinput"
id="id_last_name" maxlength="5"
- name="last_name" placeholder="last name" required type="text">
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_clearable_file_field_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_clearable_file_field_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_clearable_file_field_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_clearable_file_field_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-<form method="post" enctype="multipart/form-data">
- <div id="div_id_clearable_file" class="mb-3">
- <label for="id_clearable_file" class="form-label requiredField">
- Clearable file
- <span class="asteriskField">*</span>
- </label>
- <div class="is-invalid">
- <input type="file" name="clearable_file" class="form-control
is-invalid" id="id_clearable_file" required>
- <div id="id_clearable_file_error" class="invalid-feedback">
- <span id="error_1_id_clearable_file">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_clearable_file_field_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_clearable_file_field_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_clearable_file_field_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_clearable_file_field_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-<form method="post" enctype="multipart/form-data">
- <div id="div_id_clearable_file" class="mb-3">
- <label for="id_clearable_file" class="form-label requiredField">
- Clearable file
- <span class="asteriskField">*</span>
- </label>
- <div class="is-invalid">
- <input
- type="file"
- name="clearable_file"
- class="form-control is-invalid"
- id="id_clearable_file"
- required
- aria-invalid="true"
- >
- <div id="id_clearable_file_error" class="invalid-feedback">
- <span id="error_1_id_clearable_file">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_file_field_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_file_field_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_file_field_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_file_field_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-<form method="post" enctype="multipart/form-data">
- <div id="div_id_file_field" class="mb-3">
- <label for="id_file_field" class="form-label requiredField">
- File field
- <span class="asteriskField">*</span>
- </label>
- <div class="is-invalid">
- <input type="file" name="file_field" class="form-control
is-invalid" id="id_file_field" required>
- <div id="id_file_field_error" class="invalid-feedback">
- <span id="error_1_id_file_field">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_file_field_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_file_field_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_file_field_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_file_field_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-<form method="post" enctype="multipart/form-data">
- <div id="div_id_file_field" class="mb-3">
- <label for="id_file_field" class="form-label requiredField">
- File field
- <span class="asteriskField">*</span>
- </label>
- <div class="is-invalid">
- <input
- type="file"
- name="file_field"
- class="form-control is-invalid"
- id="id_file_field"
- required
- aria-invalid="true"
- >
- <div id="id_file_field_error" class="invalid-feedback">
- <span id="error_1_id_file_field">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_floating_field_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_floating_field_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_floating_field_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_floating_field_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-<form method="post" >
- <div id="div_id_text_area" class="form-floating mb-3">
- <textarea name="text_area" cols="40" rows="10" placeholder="text_area"
class="textarea form-control is-invalid" required id="id_text_area">
- </textarea>
- <label for="id_text_area">
- Text area<span class="asteriskField">*</span>
- </label>
- <div id="id_text_area_error" class="invalid-feedback">
- <span id="error_1_id_text_area">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
- <div id="div_id_select_input" class="form-floating mb-3">
- <select name="select_input" placeholder="select_input" class="select
form-select is-invalid" id="id_select_input">
- <option value="1">Option one</option>
- <option value="2">Option two</option>
- <option value="3">Option three</option>
- </select>
- <label for="id_select_input">
- Select input<span class="asteriskField">*</span>
- </label>
- <div id="id_select_input_error" class="invalid-feedback">
- <span id="error_1_id_select_input">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_floating_field_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_floating_field_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_floating_field_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_floating_field_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-<form method="post" >
- <div id="div_id_text_area" class="form-floating mb-3">
- <textarea name="text_area" cols="40" rows="10" placeholder="text_area"
class="textarea form-control is-invalid" required id="id_text_area"
aria-invalid="true">
- </textarea>
- <label for="id_text_area">
- Text area<span class="asteriskField">*</span>
- </label>
- <div id="id_text_area_error" class="invalid-feedback">
- <span id="error_1_id_text_area">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
- <div id="div_id_select_input" class="form-floating mb-3">
- <select name="select_input" placeholder="select_input" class="select
form-select is-invalid" id="id_select_input" aria-invalid="true">
- <option value="1">Option one</option>
- <option value="2">Option two</option>
- <option value="3">Option three</option>
- </select>
- <label for="id_select_input">
- Select input<span class="asteriskField">*</span>
- </label>
- <div id="id_select_input_error" class="invalid-feedback">
- <span id="error_1_id_select_input">
- <strong>This field is required.</strong>
- </span>
- </div>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_checkboxes_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_checkboxes_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_checkboxes_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_checkboxes_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-<form method="post">
- <div class="mb-3" id="div_id_checkbox_select_multiple">
- <fieldset>
- <legend class="form-label fs-6 requiredField">Checkbox select
multiple<span class="asteriskField">*</span></legend>
- <div><strong>Audio</strong>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_checkbox_select_multiple_0_0"
- name="checkbox_select_multiple" type="checkbox"
value="vinyl"><label class="form-check-label"
-
for="id_checkbox_select_multiple_0_0">Vinyl</label></div>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_checkbox_select_multiple_0_1"
- name="checkbox_select_multiple" type="checkbox"
value="cd"><label class="form-check-label"
-
for="id_checkbox_select_multiple_0_1">CD</label></div><strong>Video</strong>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_checkbox_select_multiple_1_0"
- name="checkbox_select_multiple" type="checkbox"
value="vhs"><label class="form-check-label"
- for="id_checkbox_select_multiple_1_0">VHS
Tape</label></div>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_checkbox_select_multiple_1_1"
- name="checkbox_select_multiple" type="checkbox"
value="dvd"><label class="form-check-label"
- for="id_checkbox_select_multiple_1_1">DVD</label></div>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_checkbox_select_multiple_2"
- name="checkbox_select_multiple" type="checkbox"
value="unknown"><label class="form-check-label"
- for="id_checkbox_select_multiple_2">Unknown</label>
- <div id="id_checkbox_select_multiple_error"
class="invalid-feedback"><p
id="error_1_id_checkbox_select_multiple"><strong>This field is
- required.</strong></p></div>
- </div>
- </div>
- <div class="form-text" id="id_checkbox_select_multiple_helptext">
- help
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_checkboxes_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_checkboxes_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_checkboxes_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_checkboxes_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-<form method="post">
- <div class="mb-3" id="div_id_checkbox_select_multiple">
- <fieldset>
- <legend class="form-label fs-6 requiredField">Checkbox select
multiple<span class="asteriskField">*</span></legend>
- <div><strong>Audio</strong>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_checkbox_select_multiple_0_0"
- name="checkbox_select_multiple" type="checkbox"
value="vinyl"><label class="form-check-label"
-
for="id_checkbox_select_multiple_0_0">Vinyl</label></div>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_checkbox_select_multiple_0_1"
- name="checkbox_select_multiple" type="checkbox"
value="cd"><label class="form-check-label"
-
for="id_checkbox_select_multiple_0_1">CD</label></div><strong>Video</strong>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_checkbox_select_multiple_1_0"
- name="checkbox_select_multiple" type="checkbox"
value="vhs"><label class="form-check-label"
- for="id_checkbox_select_multiple_1_0">VHS
Tape</label></div>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_checkbox_select_multiple_1_1"
- name="checkbox_select_multiple" type="checkbox"
value="dvd"><label class="form-check-label"
- for="id_checkbox_select_multiple_1_1">DVD</label></div>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_checkbox_select_multiple_2"
- name="checkbox_select_multiple" type="checkbox"
value="unknown"><label class="form-check-label"
- for="id_checkbox_select_multiple_2">Unknown</label>
- <div id="id_checkbox_select_multiple_error"
class="invalid-feedback">
- <p id="error_1_id_checkbox_select_multiple"><strong>This
field is
- required.</strong></p>
- </div>
- </div>
- </div>
- <div class="form-text" id="id_checkbox_select_multiple_helptext">
- help
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_checkboxes_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_checkboxes_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_checkboxes_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_checkboxes_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,27 +0,0 @@
-<form method="post">
- <div class="mb-3" id="div_id_checkbox_select_multiple">
- <fieldset>
- <legend class="form-label fs-6 requiredField">Checkbox select
multiple<span class="asteriskField">*</span></legend>
- <div><strong>Audio</strong>
- <div class="form-check"><input class="form-check-input"
id="id_checkbox_select_multiple_0_0"
- name="checkbox_select_multiple" type="checkbox"
value="vinyl"><label class="form-check-label"
-
for="id_checkbox_select_multiple_0_0">Vinyl</label></div>
- <div class="form-check"><input class="form-check-input"
id="id_checkbox_select_multiple_0_1"
- name="checkbox_select_multiple" type="checkbox"
value="cd"><label class="form-check-label"
-
for="id_checkbox_select_multiple_0_1">CD</label></div><strong>Video</strong>
- <div class="form-check"><input class="form-check-input"
id="id_checkbox_select_multiple_1_0"
- name="checkbox_select_multiple" type="checkbox"
value="vhs"><label class="form-check-label"
- for="id_checkbox_select_multiple_1_0">VHS
Tape</label></div>
- <div class="form-check"><input class="form-check-input"
id="id_checkbox_select_multiple_1_1"
- name="checkbox_select_multiple" type="checkbox"
value="dvd"><label class="form-check-label"
- for="id_checkbox_select_multiple_1_1">DVD</label></div>
- <div class="form-check"><input class="form-check-input"
id="id_checkbox_select_multiple_2"
- name="checkbox_select_multiple" type="checkbox"
value="unknown"><label class="form-check-label"
-
for="id_checkbox_select_multiple_2">Unknown</label></div>
- </div>
- <div class="form-text" id="id_checkbox_select_multiple_helptext">
- help
- </div>
- </fieldset>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_radios_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_radios_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_radios_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_radios_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-<form method="post">
- <div class="mb-3" id="div_id_radio">
- <fieldset>
- <legend class="form-label fs-6 requiredField">Radio<span
class="asteriskField">*</span></legend>
- <div><strong>Audio</strong>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_radio_0_0"
- name="radio" required type="radio"
value="vinyl"><label class="form-check-label"
- for="id_radio_0_0">Vinyl</label></div>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_radio_0_1"
- name="radio" required type="radio"
value="cd"><label class="form-check-label"
-
for="id_radio_0_1">CD</label></div><strong>Video</strong>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_radio_1_0"
- name="radio" required type="radio"
value="vhs"><label class="form-check-label"
- for="id_radio_1_0">VHS Tape</label></div>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_radio_1_1"
- name="radio" required type="radio"
value="dvd"><label class="form-check-label"
- for="id_radio_1_1">DVD</label></div>
- <div class="form-check"><input class="form-check-input
is-invalid" id="id_radio_2" name="radio"
- required type="radio"
value="unknown"><label class="form-check-label"
- for="id_radio_2">Unknown</label>
- <div id="id_radio_error" class="invalid-feedback">
- <p id="error_1_id_radio"><strong>This field is
required.</strong></p>
- </div>
- </div>
- </div>
- </fieldset>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_radios_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_radios_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_grouped_radios_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_grouped_radios_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-<form method="post">
- <div class="mb-3" id="div_id_radio">
- <fieldset>
- <legend class="form-label fs-6 requiredField">Radio<span
class="asteriskField">*</span></legend>
- <div><strong>Audio</strong>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_radio_0_0"
- name="radio" required type="radio"
value="vinyl"><label class="form-check-label"
- for="id_radio_0_0">Vinyl</label></div>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_radio_0_1"
- name="radio" required type="radio"
value="cd"><label class="form-check-label"
-
for="id_radio_0_1">CD</label></div><strong>Video</strong>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_radio_1_0"
- name="radio" required type="radio"
value="vhs"><label class="form-check-label"
- for="id_radio_1_0">VHS Tape</label></div>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_radio_1_1"
- name="radio" required type="radio"
value="dvd"><label class="form-check-label"
- for="id_radio_1_1">DVD</label></div>
- <div class="form-check"><input aria-invalid="true"
class="form-check-input is-invalid" id="id_radio_2" name="radio"
- required type="radio"
value="unknown"><label class="form-check-label"
- for="id_radio_2">Unknown</label>
- <div id="id_radio_error" class="invalid-feedback">
- <p id="error_1_id_radio"><strong>This field is
required.</strong></p>
- </div>
- </div>
- </div>
- </fieldset>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_multifield.html
new/crispy-bootstrap5-2026.3/tests/results/test_multifield.html
--- old/crispy-bootstrap5-2025.6/tests/results/test_multifield.html
1970-01-01 01:00:00.000000000 +0100
+++ new/crispy-bootstrap5-2026.3/tests/results/test_multifield.html
2026-03-01 11:05:35.000000000 +0100
@@ -0,0 +1,16 @@
+<form method="post">
+ <div class="d-flex gap-2">
+ <div>
+ <div id="div_id_password1" class="mb-3">
+ <label for="id_password1" class="form-label
requiredField">password<span class="asteriskField">*</span> </label>
+ <input type="password" name="password1" maxlength="30"
class="passwordinput form-control" required id="id_password1">
+ </div>
+ </div>
+ <div>
+ <div id="div_id_password2" class="mb-3">
+ <label for="id_password2" class="form-label
requiredField">re-enter password<span class="asteriskField">*</span></label>
+ <input type="password" name="password2" maxlength="30"
class="passwordinput form-control" required id="id_password2">
+ </div>
+ </div>
+ </div>
+</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_prepended_appended_text_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_prepended_appended_text_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_prepended_appended_text_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_prepended_appended_text_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,26 +0,0 @@
-<form method="post">
- <div class="mb-3" id="div_id_email"><label class="form-label
requiredField" for="id_email">email<span
- class="asteriskField">*</span></label>
- <div>
- <div class="input-group"><span
class="input-group-text">@<>&</span><input
- class="form-control form-control-lg inputtext textInput
textinput" id="id_email" maxlength="30"
- name="email" required type="text"><span
class="input-group-text">gmail.com</span></div><div
- class="form-text" id="id_email_helptext">Insert your
email</div>
- </div>
- </div>
- <div class="mb-3" id="div_id_password1"><label class="form-label
requiredField" for="id_password1">password<span
- class="asteriskField">*</span></label>
- <div>
- <div class="input-group"><input class="form-control textInput
textinput" id="id_password1" maxlength="30"
- name="password1" required type="password"><span
class="input-group-text">#</span></div>
- </div>
- </div>
- <div class="mb-3" id="div_id_password2"><label class="form-label
requiredField" for="id_password2">re-enter
- password<span class="asteriskField">*</span></label>
- <div >
- <div class="input-group"><span
class="input-group-text">$</span><input
- class="form-control textInput textinput" id="id_password2"
maxlength="30" name="password2" required
- type="password"></div>
- </div>
- </div>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_switch_horizontal_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_switch_horizontal_lt52.html
--- old/crispy-bootstrap5-2025.6/tests/results/test_switch_horizontal_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/test_switch_horizontal_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,13 +0,0 @@
-<form class="form-horizontal" method="post">
- <div id="div_id_is_company" class="mb-3 form-check form-switch row">
- <div class="offset-lg-2 col-lg-8">
- <input type="checkbox" name="is_company" class="checkboxinput
form-check-input" role="checkbox" id="id_is_company" />
- <label for="id_is_company" class="form-check-label">company</label>
- <div id="id_is_company_helptext" class="form-text">is_company help
text</div>
- </div>
- </div>
- <div id="div_id_first_name" class="mb-3 row">
- <label for="id_first_name" class="col-form-label col-lg-2 pt-0
requiredField">first name<span class="asteriskField">*</span> </label>
- <div class="col-lg-8"><input type="text" name="first_name"
maxlength="5" class="textinput textInput inputtext form-control" required
id="id_first_name" /></div>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_switch_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_switch_lt52.html
--- old/crispy-bootstrap5-2025.6/tests/results/test_switch_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/results/test_switch_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-<form method="post">
- <div id="div_id_is_company" class="mb-3 form-check form-switch">
- <div class="">
- <input type="checkbox" name="is_company" class="checkboxinput
form-check-input" role="checkbox" id="id_is_company" />
- <label for="id_is_company" class="form-check-label">company</label>
- <div id="id_is_company_helptext" class="form-text">is_company help
text</div>
- </div>
- </div>
-</form>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_tabular_formset_layout_failing_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_tabular_formset_layout_failing_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_tabular_formset_layout_failing_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_tabular_formset_layout_failing_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,85 +0,0 @@
-<form method="post">
- <div><input id="id_form-TOTAL_FORMS" name="form-TOTAL_FORMS" type="hidden"
value="1"><input
- id="id_form-INITIAL_FORMS" name="form-INITIAL_FORMS" type="hidden"
value="0"><input
- id="id_form-MIN_NUM_FORMS" name="form-MIN_NUM_FORMS"
type="hidden"><input id="id_form-MAX_NUM_FORMS"
- name="form-MAX_NUM_FORMS" type="hidden"></div>
- <table class="table table-sm table-striped">
- <thead>
- <tr>
- <th class="" for="id_form-0-is_company">company</th>
- <th class="requiredField" for="id_form-0-email">email<span
class="asteriskField">*</span>
- </th>
- <th class="requiredField"
for="id_form-0-password1">password<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-password2">re-enter
password<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-first_name">first
name<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-last_name">last
name<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-datetime_field">date
time<span
- class="asteriskField">*</span></th>
- </tr>
- </thead>
- <tbody>
- <tr class="d-none empty-form">
- <td class="mb-3" id="div_id_form-__prefix__-is_company"><input
- class="checkboxinput form-check-input"
id="id_form-__prefix__-is_company"
- name="form-__prefix__-is_company" type="checkbox"></td>
- <td class="mb-3" id="div_id_form-__prefix__-email"><input
- class="form-control inputtext textInput textinput"
id="id_form-__prefix__-email" maxlength="30"
- name="form-__prefix__-email" type="text"><div
class="form-text"
- id="id_form-__prefix__-email_helptext">Insert your
email</div></td>
- <td class="mb-3" id="div_id_form-__prefix__-password1"><input
class="form-control textInput textinput"
- id="id_form-__prefix__-password1" maxlength="30"
name="form-__prefix__-password1"
- type="password"></td>
- <td class="mb-3" id="div_id_form-__prefix__-password2"><input
class="form-control textInput textinput"
- id="id_form-__prefix__-password2" maxlength="30"
name="form-__prefix__-password2"
- type="password"></td>
- <td class="mb-3" id="div_id_form-__prefix__-first_name"><input
- class="form-control inputtext textInput textinput"
id="id_form-__prefix__-first_name"
- maxlength="5" name="form-__prefix__-first_name"
type="text"></td>
- <td class="mb-3" id="div_id_form-__prefix__-last_name"><input
- class="form-control inputtext textInput textinput"
id="id_form-__prefix__-last_name"
- maxlength="5" name="form-__prefix__-last_name"
type="text"></td>
- <td class="mb-3"
id="div_id_form-__prefix__-datetime_field"><input class="dateinput form-control"
- id="id_form-__prefix__-datetime_field_0"
name="form-__prefix__-datetime_field_0"
- type="text"><input class="form-control timeinput"
id="id_form-__prefix__-datetime_field_1"
- name="form-__prefix__-datetime_field_1"
type="text"></td>
- </tr>
- <div class="alert alert-block alert-danger">
- <ul class="m-0">
- <li>Passwords dont match</li>
- </ul>
- </div>
- <tr>
- <td class="mb-3" id="div_id_form-0-is_company"><input
class="checkboxinput form-check-input"
- id="id_form-0-is_company" name="form-0-is_company"
type="checkbox"></td>
- <td class="mb-3" id="div_id_form-0-email"><input
- class="form-control inputtext is-invalid textInput
textinput" id="id_form-0-email"
- maxlength="30" name="form-0-email" type="text"><div
id="id_form-0-email_error" class="invalid-feedback">
- <span id="error_1_id_form-0-email"><strong>This field
is required.</strong></span></div>
- <div class="form-text"
id="id_form-0-email_helptext">Insert your email</div></td>
- <td class="mb-3" id="div_id_form-0-password1"><input
class="form-control is-invalid textInput textinput"
- id="id_form-0-password1" maxlength="30"
name="form-0-password1" type="password"><div id="id_form-0-password1_error"
class="invalid-feedback" ><span
- id="error_1_id_form-0-password1"><strong>This field is
required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-password2"><input
class="form-control is-invalid textInput textinput"
- id="id_form-0-password2" maxlength="30"
name="form-0-password2" type="password"><div id="id_form-0-password2_error"
class="invalid-feedback">
- <span id="error_1_id_form-0-password2"><strong>This
field is required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-first_name"><input
- class="form-control inputtext is-invalid textInput
textinput" id="id_form-0-first_name"
- maxlength="5" name="form-0-first_name"
type="text"><div id="id_form-0-first_name_error" class="invalid-feedback"><span
- id="error_1_id_form-0-first_name"><strong>This field
is required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-last_name"><input
- class="form-control inputtext is-invalid textInput
textinput" id="id_form-0-last_name"
- maxlength="5" name="form-0-last_name" type="text"><div
id="id_form-0-last_name_error" class="invalid-feedback">
- <span id="error_1_id_form-0-last_name"><strong>This field
is required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-datetime_field"><input
class="dateinput form-control is-invalid"
- id="id_form-0-datetime_field_0"
name="form-0-datetime_field_0" type="text"><input
- class="form-control is-invalid timeinput"
id="id_form-0-datetime_field_1"
- name="form-0-datetime_field_1" type="text"><div
id="id_form-0-datetime_field_error" class="invalid-feedback"><span
- id="error_1_id_form-0-datetime_field"><strong>This
field is required.</strong></span></div></td>
- </tr>
- </tbody>
- </table>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_tabular_formset_layout_failing_lt52.html
new/crispy-bootstrap5-2026.3/tests/results/test_tabular_formset_layout_failing_lt52.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_tabular_formset_layout_failing_lt52.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_tabular_formset_layout_failing_lt52.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,87 +0,0 @@
-<form method="post">
- <div><input id="id_form-TOTAL_FORMS" name="form-TOTAL_FORMS" type="hidden"
value="1"><input
- id="id_form-INITIAL_FORMS" name="form-INITIAL_FORMS" type="hidden"
value="0"><input
- id="id_form-MIN_NUM_FORMS" name="form-MIN_NUM_FORMS"
type="hidden"><input id="id_form-MAX_NUM_FORMS"
- name="form-MAX_NUM_FORMS" type="hidden"></div>
- <table class="table table-sm table-striped">
- <thead>
- <tr>
- <th class="" for="id_form-0-is_company">company</th>
- <th class="requiredField" for="id_form-0-email">email<span
class="asteriskField">*</span>
- </th>
- <th class="requiredField"
for="id_form-0-password1">password<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-password2">re-enter
password<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-first_name">first
name<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-last_name">last
name<span
- class="asteriskField">*</span></th>
- <th class="requiredField" for="id_form-0-datetime_field">date
time<span
- class="asteriskField">*</span></th>
- </tr>
- </thead>
- <tbody>
- <tr class="d-none empty-form">
- <td class="mb-3" id="div_id_form-__prefix__-is_company"><input
- class="checkboxinput form-check-input"
id="id_form-__prefix__-is_company"
- name="form-__prefix__-is_company" type="checkbox"></td>
- <td class="mb-3" id="div_id_form-__prefix__-email"><input
- class="form-control inputtext textInput textinput"
id="id_form-__prefix__-email" maxlength="30"
- name="form-__prefix__-email" type="text"
aria-describedby="id_form-__prefix__-email_helptext">
- <div class="form-text"
id="id_form-__prefix__-email_helptext">Insert your email</div></td>
- <td class="mb-3" id="div_id_form-__prefix__-password1"><input
class="form-control textInput textinput"
- id="id_form-__prefix__-password1" maxlength="30"
name="form-__prefix__-password1"
- type="password"></td>
- <td class="mb-3" id="div_id_form-__prefix__-password2"><input
class="form-control textInput textinput"
- id="id_form-__prefix__-password2" maxlength="30"
name="form-__prefix__-password2"
- type="password"></td>
- <td class="mb-3" id="div_id_form-__prefix__-first_name"><input
- class="form-control inputtext textInput textinput"
id="id_form-__prefix__-first_name"
- maxlength="5" name="form-__prefix__-first_name"
type="text"></td>
- <td class="mb-3" id="div_id_form-__prefix__-last_name"><input
- class="form-control inputtext textInput textinput"
id="id_form-__prefix__-last_name"
- maxlength="5" name="form-__prefix__-last_name"
type="text"></td>
- <td class="mb-3"
id="div_id_form-__prefix__-datetime_field"><input class="dateinput form-control"
- id="id_form-__prefix__-datetime_field_0"
name="form-__prefix__-datetime_field_0"
- type="text"><input class="form-control timeinput"
id="id_form-__prefix__-datetime_field_1"
- name="form-__prefix__-datetime_field_1"
type="text"></td>
- </tr>
- <div class="alert alert-block alert-danger">
- <ul class="m-0">
- <li>Passwords dont match</li>
- </ul>
- </div>
- <tr>
- <td class="mb-3" id="div_id_form-0-is_company"><input
class="checkboxinput form-check-input"
- id="id_form-0-is_company" name="form-0-is_company"
type="checkbox"></td>
- <td class="mb-3" id="div_id_form-0-email"><input
aria-describedby="id_form-0-email_helptext"
- class="form-control inputtext is-invalid textInput
textinput" id="id_form-0-email" aria-invalid="true"
- maxlength="30" name="form-0-email" type="text"><div
id="id_form-0-email_error" class="invalid-feedback">
- <span id="error_1_id_form-0-email"><strong>This field
is required.</strong></span></div><div
- class="form-text" id="id_form-0-email_helptext">Insert
your email</div></td>
- <td class="mb-3" id="div_id_form-0-password1"><input
class="form-control is-invalid textInput textinput"
- id="id_form-0-password1" maxlength="30"
name="form-0-password1" type="password" aria-invalid="true">
- <div id="id_form-0-password1_error"
class="invalid-feedback"><span id="error_1_id_form-0-password1">
- <strong>This field is
required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-password2"><input
class="form-control is-invalid textInput textinput"
- id="id_form-0-password2" maxlength="30"
name="form-0-password2" type="password" aria-invalid="true"><div
id="id_form-0-password2_error" class="invalid-feedback">
- <span id="error_1_id_form-0-password2"><strong>This field
is required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-first_name"><input
- class="form-control inputtext is-invalid textInput
textinput" id="id_form-0-first_name"
- maxlength="5" name="form-0-first_name" type="text"
aria-invalid="true"><div id="id_form-0-first_name_error"
class="invalid-feedback" >
- <span id="error_1_id_form-0-first_name"><strong>This field
is required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-last_name"><input
- class="form-control inputtext is-invalid textInput
textinput" id="id_form-0-last_name"
- maxlength="5" name="form-0-last_name" type="text"
aria-invalid="true"><div id="id_form-0-last_name_error"
class="invalid-feedback" >
- <span id="error_1_id_form-0-last_name"><strong>This
field is required.</strong></span></div></td>
- <td class="mb-3" id="div_id_form-0-datetime_field"><input
class="dateinput form-control is-invalid"
- id="id_form-0-datetime_field_0"
name="form-0-datetime_field_0" type="text" aria-invalid="true"><input
- class="form-control is-invalid timeinput"
id="id_form-0-datetime_field_1"
- name="form-0-datetime_field_1" type="text"
aria-invalid="true"><div id="id_form-0-datetime_field_error"
class="invalid-feedback" >
- <span
id="error_1_id_form-0-datetime_field"><strong>This field is required.</strong>
- </span></div></td>
- </tr>
- </tbody>
- </table>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/results/test_tabular_formset_layout_lt50.html
new/crispy-bootstrap5-2026.3/tests/results/test_tabular_formset_layout_lt50.html
---
old/crispy-bootstrap5-2025.6/tests/results/test_tabular_formset_layout_lt50.html
2025-06-08 09:38:56.000000000 +0200
+++
new/crispy-bootstrap5-2026.3/tests/results/test_tabular_formset_layout_lt50.html
1970-01-01 01:00:00.000000000 +0100
@@ -1,103 +0,0 @@
-<form method="post">
-<div> <input type="hidden" name="form-TOTAL_FORMS" value="3"
id="id_form-TOTAL_FORMS"> <input type="hidden"
- name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS"> <input
type="hidden" name="form-MIN_NUM_FORMS"
- value="0" id="id_form-MIN_NUM_FORMS"> <input type="hidden"
name="form-MAX_NUM_FORMS" value="1000"
- id="id_form-MAX_NUM_FORMS"> </div>
-<table class="table table-striped table-sm">
- <thead>
- <tr>
- <th for="id_form-0-is_company" class=""> company </th>
- <th for="id_form-0-email" class="requiredField"> email<span
class="asteriskField">*</span>
- </th>
- <th for="id_form-0-password1" class="requiredField"> password<span
- class="asteriskField">*</span> </th>
- <th for="id_form-0-password2" class="requiredField"> re-enter
password<span
- class="asteriskField">*</span> </th>
- <th for="id_form-0-first_name" class="requiredField"> first name<span
- class="asteriskField">*</span> </th>
- <th for="id_form-0-last_name" class="requiredField"> last name<span
- class="asteriskField">*</span> </th>
- <th for="id_form-0-datetime_field" class="requiredField"> date
time<span
- class="asteriskField">*</span> </th>
- </tr>
- </thead>
- <tbody>
- <tr class="d-none empty-form">
- <td id="div_id_form-__prefix__-is_company" class="mb-3"> <input
type="checkbox"
- name="form-__prefix__-is_company" class="checkboxinput
form-check-input"
- id="id_form-__prefix__-is_company"> </td>
- <td id="div_id_form-__prefix__-email" class="mb-3"> <input type="text"
name="form-__prefix__-email"
- maxlength="30" class="textinput textInput inputtext form-control"
id="id_form-__prefix__-email"> <div
- id="id_form-__prefix__-email_helptext" class="form-text">Insert
your email</div> </td>
- <td id="div_id_form-__prefix__-password1" class="mb-3"> <input
type="password"
- name="form-__prefix__-password1" maxlength="30" class="textinput
textInput form-control"
- id="id_form-__prefix__-password1"> </td>
- <td id="div_id_form-__prefix__-password2" class="mb-3"> <input
type="password"
- name="form-__prefix__-password2" maxlength="30" class="textinput
textInput form-control"
- id="id_form-__prefix__-password2"> </td>
- <td id="div_id_form-__prefix__-first_name" class="mb-3"> <input
type="text" name="form-__prefix__-first_name"
- maxlength="5" class="textinput textInput inputtext form-control"
id="id_form-__prefix__-first_name"> </td>
- <td id="div_id_form-__prefix__-last_name" class="mb-3"> <input
type="text" name="form-__prefix__-last_name"
- maxlength="5" class="textinput textInput inputtext form-control"
id="id_form-__prefix__-last_name"> </td>
- <td id="div_id_form-__prefix__-datetime_field" class="mb-3"> <input
type="text"
- name="form-__prefix__-datetime_field_0" class="dateinput
form-control"
- id="id_form-__prefix__-datetime_field_0"><input type="text"
name="form-__prefix__-datetime_field_1"
- class="timeinput form-control"
id="id_form-__prefix__-datetime_field_1"> </td>
- </tr>
- <tr>
- <td id="div_id_form-0-is_company" class="mb-3"> <input type="checkbox"
name="form-0-is_company"
- class="checkboxinput form-check-input" id="id_form-0-is_company">
</td>
- <td id="div_id_form-0-email" class="mb-3"> <input type="text"
name="form-0-email" maxlength="30"
- class="textinput textInput inputtext form-control"
id="id_form-0-email"> <div id="id_form-0-email_helptext"
- class="form-text">Insert your email</div> </td>
- <td id="div_id_form-0-password1" class="mb-3"> <input type="password"
name="form-0-password1" maxlength="30"
- class="textinput textInput form-control" id="id_form-0-password1">
</td>
- <td id="div_id_form-0-password2" class="mb-3"> <input type="password"
name="form-0-password2" maxlength="30"
- class="textinput textInput form-control" id="id_form-0-password2">
</td>
- <td id="div_id_form-0-first_name" class="mb-3"> <input type="text"
name="form-0-first_name" maxlength="5"
- class="textinput textInput inputtext form-control"
id="id_form-0-first_name"> </td>
- <td id="div_id_form-0-last_name" class="mb-3"> <input type="text"
name="form-0-last_name" maxlength="5"
- class="textinput textInput inputtext form-control"
id="id_form-0-last_name"> </td>
- <td id="div_id_form-0-datetime_field" class="mb-3"> <input type="text"
name="form-0-datetime_field_0"
- class="dateinput form-control"
id="id_form-0-datetime_field_0"><input type="text"
- name="form-0-datetime_field_1" class="timeinput form-control"
id="id_form-0-datetime_field_1"> </td>
- </tr>
- <tr>
- <td id="div_id_form-1-is_company" class="mb-3"> <input type="checkbox"
name="form-1-is_company"
- class="checkboxinput form-check-input" id="id_form-1-is_company">
</td>
- <td id="div_id_form-1-email" class="mb-3"> <input type="text"
name="form-1-email" maxlength="30"
- class="textinput textInput inputtext form-control"
id="id_form-1-email"> <div id="id_form-1-email_helptext"
- class="form-text">Insert your email</div> </td>
- <td id="div_id_form-1-password1" class="mb-3"> <input type="password"
name="form-1-password1" maxlength="30"
- class="textinput textInput form-control" id="id_form-1-password1">
</td>
- <td id="div_id_form-1-password2" class="mb-3"> <input type="password"
name="form-1-password2" maxlength="30"
- class="textinput textInput form-control" id="id_form-1-password2">
</td>
- <td id="div_id_form-1-first_name" class="mb-3"> <input type="text"
name="form-1-first_name" maxlength="5"
- class="textinput textInput inputtext form-control"
id="id_form-1-first_name"> </td>
- <td id="div_id_form-1-last_name" class="mb-3"> <input type="text"
name="form-1-last_name" maxlength="5"
- class="textinput textInput inputtext form-control"
id="id_form-1-last_name"> </td>
- <td id="div_id_form-1-datetime_field" class="mb-3"> <input type="text"
name="form-1-datetime_field_0"
- class="dateinput form-control"
id="id_form-1-datetime_field_0"><input type="text"
- name="form-1-datetime_field_1" class="timeinput form-control"
id="id_form-1-datetime_field_1"> </td>
- </tr>
- <tr>
- <td id="div_id_form-2-is_company" class="mb-3"> <input type="checkbox"
name="form-2-is_company"
- class="checkboxinput form-check-input" id="id_form-2-is_company">
</td>
- <td id="div_id_form-2-email" class="mb-3"> <input type="text"
name="form-2-email" maxlength="30"
- class="textinput textInput inputtext form-control"
id="id_form-2-email"> <div id="id_form-2-email_helptext"
- class="form-text">Insert your email</div> </td>
- <td id="div_id_form-2-password1" class="mb-3"> <input type="password"
name="form-2-password1" maxlength="30"
- class="textinput textInput form-control" id="id_form-2-password1">
</td>
- <td id="div_id_form-2-password2" class="mb-3"> <input type="password"
name="form-2-password2" maxlength="30"
- class="textinput textInput form-control" id="id_form-2-password2">
</td>
- <td id="div_id_form-2-first_name" class="mb-3"> <input type="text"
name="form-2-first_name" maxlength="5"
- class="textinput textInput inputtext form-control"
id="id_form-2-first_name"> </td>
- <td id="div_id_form-2-last_name" class="mb-3"> <input type="text"
name="form-2-last_name" maxlength="5"
- class="textinput textInput inputtext form-control"
id="id_form-2-last_name"> </td>
- <td id="div_id_form-2-datetime_field" class="mb-3"> <input type="text"
name="form-2-datetime_field_0"
- class="dateinput form-control"
id="id_form-2-datetime_field_0"><input type="text"
- name="form-2-datetime_field_1" class="timeinput form-control"
id="id_form-2-datetime_field_1"> </td>
- </tr>
- </tbody>
-</table>
-</form>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/tests/test_form_helper.py
new/crispy-bootstrap5-2026.3/tests/test_form_helper.py
--- old/crispy-bootstrap5-2025.6/tests/test_form_helper.py 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/test_form_helper.py 2026-03-01
11:05:35.000000000 +0100
@@ -121,10 +121,7 @@
# Ensure those errors were rendered
assert "<li>Passwords dont match</li>" in html
assert str(_("This field is required.")) in html
- if django.VERSION < (5, 2):
- assert html.count("error") == 8
- else:
- assert html.count("error") == 12
+ assert html.count("error") == 12
# Now we render without errors
form.helper.form_show_errors = False
@@ -134,10 +131,7 @@
# Ensure errors were not rendered
assert "<li>Passwords dont match</li>" not in html
assert str(_("This field is required.")) not in html
- if django.VERSION < (5, 2):
- assert html.count("error") == 0
- else:
- assert html.count("error") == 4
+ assert html.count("error") == 4
def test_html5_required():
@@ -494,17 +488,11 @@
form.helper.form_show_errors = True
html = render_crispy_form(form)
- if django.VERSION < (5, 2):
- assert html.count("error") == 6
- else:
- assert html.count("error") == 9
+ assert html.count("error") == 9
form.helper.form_show_errors = False
html = render_crispy_form(form)
- if django.VERSION < (5, 2):
- assert html.count("error") == 0
- else:
- assert html.count("error") == 3
+ assert html.count("error") == 3
def test_error_text_inline():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/tests/test_layout.py
new/crispy-bootstrap5-2026.3/tests/test_layout.py
--- old/crispy-bootstrap5-2025.6/tests/test_layout.py 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/test_layout.py 2026-03-01
11:05:35.000000000 +0100
@@ -323,11 +323,7 @@
),
)
)
- if django.VERSION < (5, 0):
- expected = "field_with_buttons_lt50.html"
- else:
- expected = "field_with_buttons.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) == parse_expected("field_with_buttons.html")
form = SampleForm3({})
form.helper = FormHelper()
@@ -340,13 +336,7 @@
),
)
)
- if django.VERSION < (5, 0):
- expected = "field_with_buttons_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "field_with_buttons_failing_lt52.html"
- else:
- expected = "field_with_buttons_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("field_with_buttons_failing.html")
def test_field_with_buttons_select():
@@ -559,11 +549,7 @@
form.helper.field_template = "bootstrap5/layout/inline_field.html"
form.helper.layout = Layout("email", "password1", "last_name")
form.helper.form_class = "row row-cols-lg-auto"
- if django.VERSION < (5, 0):
- expected = "test_bootstrap5_form_inline_lt50.html"
- else:
- expected = "test_bootstrap5_form_inline.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("test_bootstrap5_form_inline.html")
def test_select():
@@ -617,23 +603,12 @@
form.helper = FormHelper()
form.helper.layout = Layout("clearable_file")
- if django.VERSION < (5, 0):
- expected = "test_clearable_file_field_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "test_clearable_file_field_failing_lt52.html"
- else:
- expected = "test_clearable_file_field_failing.html"
+ expected = "test_clearable_file_field_failing.html"
assert parse_form(form) == parse_expected(expected)
form.helper.layout = Layout("file_field")
- if django.VERSION < (5, 0):
- expected = "test_file_field_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "test_file_field_failing_lt52.html"
- else:
- expected = "test_file_field_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) == parse_expected("test_file_field_failing.html")
def test_row():
@@ -662,11 +637,7 @@
formset = SampleFormSet()
formset.helper = FormHelper()
formset.helper.template = "bootstrap5/table_inline_formset.html"
- if django.VERSION < (5, 0):
- expected = "test_tabular_formset_layout_lt50.html"
- else:
- expected = "test_tabular_formset_layout.html"
- assert parse_form(formset) == parse_expected(expected)
+ assert parse_form(formset) ==
parse_expected("test_tabular_formset_layout.html")
SampleFormSet = formset_factory(SampleForm, extra=3)
data = {
@@ -676,13 +647,7 @@
formset = SampleFormSet(data)
formset.helper = FormHelper()
formset.helper.template = "bootstrap5/table_inline_formset.html"
- if django.VERSION < (5, 0):
- expected = "test_tabular_formset_layout_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "test_tabular_formset_layout_failing_lt52.html"
- else:
- expected = "test_tabular_formset_layout_failing.html"
- assert parse_form(formset) == parse_expected(expected)
+ assert parse_form(formset) ==
parse_expected("test_tabular_formset_layout_failing.html")
def test_flat_attrs_safe():
@@ -701,8 +666,4 @@
form = HelpTextForm()
form.helper = FormHelper()
form.helper.form_tag = False
- if django.VERSION < (5, 0):
- expected = "help_text_escape_lt50.html"
- else:
- expected = "help_text_escape.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) == parse_expected("help_text_escape.html")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/crispy-bootstrap5-2025.6/tests/test_layout_objects.py
new/crispy-bootstrap5-2026.3/tests/test_layout_objects.py
--- old/crispy-bootstrap5-2025.6/tests/test_layout_objects.py 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/test_layout_objects.py 2026-03-01
11:05:35.000000000 +0100
@@ -20,7 +20,7 @@
TabHolder,
)
from crispy_forms.helper import FormHelper
-from crispy_forms.layout import HTML, Field, Layout, MultiWidgetField
+from crispy_forms.layout import HTML, Field, Layout, MultiField,
MultiWidgetField
from crispy_forms.utils import render_crispy_form
from django import forms
from django.template import Context, Template
@@ -222,11 +222,7 @@
AppendedText("password1", "#"),
PrependedText("password2", "$"),
)
- if django.VERSION < (5, 0):
- expected = "test_prepended_appended_text_lt50.html"
- else:
- expected = "test_prepended_appended_text.html"
- assert parse_form(test_form) == parse_expected(expected)
+ assert parse_form(test_form) ==
parse_expected("test_prepended_appended_text.html")
def test_inline_radios(self):
form = CheckboxesSampleForm()
@@ -244,25 +240,13 @@
form = CheckboxesSampleForm({})
form.helper = FormHelper()
form.helper.layout = Layout(InlineRadios("inline_radios"))
- if django.VERSION < (5, 0):
- expected = "inline_radios_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "inline_radios_failing_lt52.html"
- else:
- expected = "inline_radios_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) == parse_expected("inline_radios_failing.html")
def test_inline_checkboxes_failing(self):
form = CheckboxesSampleForm({})
form.helper = FormHelper()
form.helper.layout = InlineRadios("checkboxes")
- if django.VERSION < (5, 0):
- expected = "inline_checkboxes_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "inline_checkboxes_failing_lt52.html"
- else:
- expected = "inline_checkboxes_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("inline_checkboxes_failing.html")
@override_settings(CRISPY_CLASS_CONVERTERS=CONVERTERS)
def test_accordion_and_accordiongroup(self):
@@ -542,6 +526,12 @@
assert html.count('type="hidden"') == 5
assert html.count("<label") == 0
+ def test_multifield(self):
+ test_form = SampleForm()
+ test_form.helper = FormHelper()
+ test_form.helper.layout = Layout(MultiField("", "password1",
"password2"))
+ assert parse_form(test_form) == parse_expected("test_multifield.html")
+
def test_multiplecheckboxes(self):
test_form = CheckboxesSampleForm()
html = render_crispy_form(test_form)
@@ -596,56 +586,30 @@
FloatingField("text_area"),
FloatingField("select_input"),
)
- if django.VERSION < (5, 0):
- expected = "test_floating_field_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "test_floating_field_failing_lt52.html"
- else:
- expected = "test_floating_field_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("test_floating_field_failing.html")
def test_grouped_checkboxes_radios(self):
form = GroupedChoiceForm()
form.helper = FormHelper()
form.helper.layout = Layout("checkbox_select_multiple")
- if django.VERSION < (5, 2):
- expected = "test_grouped_checkboxes_lt52.html"
- else:
- expected = "test_grouped_checkboxes.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("test_grouped_checkboxes.html")
form.helper.layout = Layout("radio")
assert parse_form(form) == parse_expected("test_grouped_radios.html")
form = GroupedChoiceForm({})
form.helper = FormHelper()
form.helper.layout = Layout("checkbox_select_multiple")
- if django.VERSION < (5, 0):
- expected = "test_grouped_checkboxes_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "test_grouped_checkboxes_failing_lt52.html"
- else:
- expected = "test_grouped_checkboxes_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("test_grouped_checkboxes_failing.html")
form.helper.layout = Layout("radio")
- if django.VERSION < (5, 0):
- expected = "test_grouped_radios_failing_lt50.html"
- elif django.VERSION < (5, 2):
- expected = "test_grouped_radios_failing_lt52.html"
- else:
- expected = "test_grouped_radios_failing.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("test_grouped_radios_failing.html")
def test_switch(self):
form = SampleForm()
form["is_company"].help_text = "is_company help text"
form.helper = FormHelper()
form.helper.layout = Layout(Switch("is_company"))
- if django.VERSION < (5, 2):
- expected = "test_switch_lt52.html"
- else:
- expected = "test_switch.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) == parse_expected("test_switch.html")
def test_switch_horizontal(self):
form = SampleForm()
@@ -655,11 +619,7 @@
form.helper.field_class = "col-lg-8"
form.helper.form_class = "form-horizontal"
form.helper.layout = Layout(Switch("is_company"), "first_name")
- if django.VERSION < (5, 2):
- expected = "test_switch_horizontal_lt52.html"
- else:
- expected = "test_switch_horizontal.html"
- assert parse_form(form) == parse_expected(expected)
+ assert parse_form(form) ==
parse_expected("test_switch_horizontal.html")
def test_modal(self):
test_form = SampleForm()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/tests/test_tags.py
new/crispy-bootstrap5-2026.3/tests/test_tags.py
--- old/crispy-bootstrap5-2025.6/tests/test_tags.py 2025-06-08
09:38:56.000000000 +0200
+++ new/crispy-bootstrap5-2026.3/tests/test_tags.py 2026-03-01
11:05:35.000000000 +0100
@@ -94,10 +94,7 @@
c = Context({"formset": formset})
html = template.render(c)
assert "errorMsg" in html or "alert" in html
- if django.VERSION < (3, 2):
- assert "<li>Please submit 1 or fewer forms.</li>" in html
- else:
- assert "<li>Please submit at most 1 form.</li>" in html
+ assert "<li>Please submit at most 1 form.</li>" in html
assert "<h3>" not in html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/crispy-bootstrap5-2025.6/tox.ini
new/crispy-bootstrap5-2026.3/tox.ini
--- old/crispy-bootstrap5-2025.6/tox.ini 2025-06-08 09:38:56.000000000
+0200
+++ new/crispy-bootstrap5-2026.3/tox.ini 2026-03-01 11:05:35.000000000
+0100
@@ -1,21 +1,18 @@
[tox]
envlist =
- {py38,py39,py310,py311}-django{42}-crispy{-release,-latest},
- {py310,py311,py312}-django{50,51,52,-latest}-crispy{-release,-latest},
- {py313}-django{51,52,-latest}-crispy{-release,-latest},
+ {py310,py311}-django{52}-crispy{-release,-latest},
+ {py312,py313,py314}-django{52,60,-latest}-crispy{-release,-latest},
lint
[testenv]
package = wheel
wheel_build_env = .pkg
deps =
- django42: django>=4.2a1,<5.0
- django50: django>=5.0a1,<5.1
- django51: django>=5.1a1,<5.2
django52: django>=5.2a1,<5.3
+ django60: django>=6.0a1,<6.1
crispy-release: django-crispy-forms>=2.3
crispy-latest:
https://github.com/django-crispy-forms/django-crispy-forms/archive/main.tar.gz
-extras = test
+dependency_groups = test
commands = python -W error::DeprecationWarning -W
error::PendingDeprecationWarning -m pytest {posargs}
[testenv:lint]
@@ -24,10 +21,7 @@
black crispy_bootstrap5 --check
isort crispy_bootstrap5 --check --dif
flake8 crispy_bootstrap5
-deps =
- black
- flake8
- isort
+dependency_groups = lint
[flake8]
max-line-length = 88