From 98756c685ee173bbd43f21ed0553f808be835ce5 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 13 Jan 2023 09:32:35 +0100 Subject: [PATCH] Refs #32339 -- Changed default form and formset rendering style to div-based. Per deprecation timeline. This also removes "django/forms/default.html" and "django/forms/formsets/default.html" templates. --- django/forms/formsets.py | 2 -- django/forms/jinja2/django/forms/default.html | 1 - .../jinja2/django/forms/formsets/default.html | 1 - django/forms/renderers.py | 7 ++--- .../forms/templates/django/forms/default.html | 1 - .../django/forms/formsets/default.html | 1 - django/forms/utils.py | 20 ------------- docs/ref/forms/renderers.txt | 18 ++---------- docs/releases/5.0.txt | 5 ++++ tests/forms_tests/tests/__init__.py | 4 +-- tests/forms_tests/tests/test_forms.py | 16 +--------- tests/forms_tests/tests/test_formsets.py | 29 +------------------ tests/runtests.py | 3 -- 13 files changed, 12 insertions(+), 96 deletions(-) delete mode 100644 django/forms/jinja2/django/forms/default.html delete mode 100644 django/forms/jinja2/django/forms/formsets/default.html delete mode 100644 django/forms/templates/django/forms/default.html delete mode 100644 django/forms/templates/django/forms/formsets/default.html diff --git a/django/forms/formsets.py b/django/forms/formsets.py index f14e1aae83..235aaf844c 100644 --- a/django/forms/formsets.py +++ b/django/forms/formsets.py @@ -32,8 +32,6 @@ class ManagementForm(Form): as well. """ - template_name = "django/forms/div.html" # RemovedInDjango50Warning. - TOTAL_FORMS = IntegerField(widget=HiddenInput) INITIAL_FORMS = IntegerField(widget=HiddenInput) # MIN_NUM_FORM_COUNT and MAX_NUM_FORM_COUNT are output with the rest of the diff --git a/django/forms/jinja2/django/forms/default.html b/django/forms/jinja2/django/forms/default.html deleted file mode 100644 index d034b60d57..0000000000 --- a/django/forms/jinja2/django/forms/default.html +++ /dev/null @@ -1 +0,0 @@ -{% include "django/forms/table.html" %} diff --git a/django/forms/jinja2/django/forms/formsets/default.html b/django/forms/jinja2/django/forms/formsets/default.html deleted file mode 100644 index d8284c5da1..0000000000 --- a/django/forms/jinja2/django/forms/formsets/default.html +++ /dev/null @@ -1 +0,0 @@ -{{ formset.management_form }}{% for form in formset %}{{ form }}{% endfor %} diff --git a/django/forms/renderers.py b/django/forms/renderers.py index 43340c6c88..d53a7c633d 100644 --- a/django/forms/renderers.py +++ b/django/forms/renderers.py @@ -15,11 +15,8 @@ def get_default_renderer(): class BaseRenderer: - # RemovedInDjango50Warning: When the deprecation ends, replace with - # form_template_name = "django/forms/div.html" - # formset_template_name = "django/forms/formsets/div.html" - form_template_name = "django/forms/default.html" - formset_template_name = "django/forms/formsets/default.html" + form_template_name = "django/forms/div.html" + formset_template_name = "django/forms/formsets/div.html" def get_template(self, template_name): raise NotImplementedError("subclasses must implement get_template()") diff --git a/django/forms/templates/django/forms/default.html b/django/forms/templates/django/forms/default.html deleted file mode 100644 index d034b60d57..0000000000 --- a/django/forms/templates/django/forms/default.html +++ /dev/null @@ -1 +0,0 @@ -{% include "django/forms/table.html" %} diff --git a/django/forms/templates/django/forms/formsets/default.html b/django/forms/templates/django/forms/formsets/default.html deleted file mode 100644 index d8284c5da1..0000000000 --- a/django/forms/templates/django/forms/formsets/default.html +++ /dev/null @@ -1 +0,0 @@ -{{ formset.management_form }}{% for form in formset %}{{ form }}{% endfor %} diff --git a/django/forms/utils.py b/django/forms/utils.py index 7577c0bbda..e0888b6e85 100644 --- a/django/forms/utils.py +++ b/django/forms/utils.py @@ -1,16 +1,13 @@ import json -import warnings from collections import UserList from django.conf import settings from django.core.exceptions import ValidationError from django.forms.renderers import get_default_renderer from django.utils import timezone -from django.utils.deprecation import RemovedInDjango50Warning from django.utils.html import escape, format_html_join from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ -from django.utils.version import get_docs_version def pretty_name(name): @@ -45,16 +42,6 @@ def flatatt(attrs): ) -DEFAULT_TEMPLATE_DEPRECATION_MSG = ( - 'The "default.html" templates for forms and formsets will be removed. These were ' - 'proxies to the equivalent "table.html" templates, but the new "div.html" ' - "templates will be the default from Django 5.0. Transitional renderers are " - "provided to allow you to opt-in to the new output style now. See " - "https://docs.djangoproject.com/en/%s/releases/4.1/ for more details" - % get_docs_version() -) - - class RenderableMixin: def get_context(self): raise NotImplementedError( @@ -65,13 +52,6 @@ class RenderableMixin: renderer = renderer or self.renderer template = template_name or self.template_name context = context or self.get_context() - if ( - template == "django/forms/default.html" - or template == "django/forms/formsets/default.html" - ): - warnings.warn( - DEFAULT_TEMPLATE_DEPRECATION_MSG, RemovedInDjango50Warning, stacklevel=2 - ) return mark_safe(renderer.render(template, context)) __str__ = render diff --git a/docs/ref/forms/renderers.txt b/docs/ref/forms/renderers.txt index 9bb19df1c1..92ec2d68df 100644 --- a/docs/ref/forms/renderers.txt +++ b/docs/ref/forms/renderers.txt @@ -51,27 +51,13 @@ should return a rendered templates (as a string) or raise The default name of the template to use to render a form. - Defaults to ``"django/forms/default.html"``, which is a proxy for - ``"django/forms/table.html"``. - - .. deprecated:: 4.1 - - The ``"django/forms/default.html"`` template is deprecated and will be - removed in Django 5.0. The default will become - ``"django/forms/div.html"`` at that time. + Defaults to ``"django/forms/div.html"`` template. .. attribute:: formset_template_name The default name of the template to use to render a formset. - Defaults to ``"django/forms/formsets/default.html"``, which is a proxy - for ``"django/forms/formsets/table.html"``. - - .. deprecated:: 4.1 - - The ``"django/forms/formset/default.html"`` template is deprecated and - will be removed in Django 5.0. The default will become - ``"django/forms/formset/div.html"`` template. + Defaults to ``"django/forms/formsets/div.html"`` template. .. method:: get_template(template_name) diff --git a/docs/releases/5.0.txt b/docs/releases/5.0.txt index f1ab7b2e7f..d8212e69e6 100644 --- a/docs/releases/5.0.txt +++ b/docs/releases/5.0.txt @@ -342,3 +342,8 @@ to remove usage of these features. * The ``django.contrib.gis.admin.OpenLayersWidget`` is removed. + The ``django.contrib.auth.hashers.CryptPasswordHasher`` is removed. + +* The ``"django/forms/default.html"`` and + ``"django/forms/formsets/default.html"`` templates are removed. + +* The default form and formset rendering style is changed to the div-based. diff --git a/tests/forms_tests/tests/__init__.py b/tests/forms_tests/tests/__init__.py index 1878eaf6e5..193a7149a1 100644 --- a/tests/forms_tests/tests/__init__.py +++ b/tests/forms_tests/tests/__init__.py @@ -11,8 +11,6 @@ except ImportError: def jinja2_tests(test_func): test_func = skipIf(jinja2 is None, "this test requires jinja2")(test_func) return override_settings( - # RemovedInDjango50Warning: When the deprecation ends, revert to - # FORM_RENDERER="django.forms.renderers.Jinja2", - FORM_RENDERER="django.forms.renderers.Jinja2DivFormRenderer", + FORM_RENDERER="django.forms.renderers.Jinja2", TEMPLATES={"BACKEND": "django.template.backends.jinja2.Jinja2"}, )(test_func) diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 930a200b14..14e3755b68 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -42,9 +42,8 @@ from django.forms.utils import ErrorList from django.http import QueryDict from django.template import Context, Template from django.test import SimpleTestCase -from django.test.utils import isolate_lru_cache, override_settings +from django.test.utils import override_settings from django.utils.datastructures import MultiValueDict -from django.utils.deprecation import RemovedInDjango50Warning from django.utils.safestring import mark_safe from . import jinja2_tests @@ -5084,16 +5083,3 @@ class OverrideTests(SimpleTestCase): '' 'Language:', ) - - -class DeprecationTests(SimpleTestCase): - def test_warning(self): - from django.forms.utils import DEFAULT_TEMPLATE_DEPRECATION_MSG - - with isolate_lru_cache(get_default_renderer), self.settings( - FORM_RENDERER="django.forms.renderers.DjangoTemplates" - ), self.assertRaisesMessage( - RemovedInDjango50Warning, DEFAULT_TEMPLATE_DEPRECATION_MSG - ): - form = Person() - str(form) diff --git a/tests/forms_tests/tests/test_formsets.py b/tests/forms_tests/tests/test_formsets.py index f0e4b154b7..e2c695f0dc 100644 --- a/tests/forms_tests/tests/test_formsets.py +++ b/tests/forms_tests/tests/test_formsets.py @@ -23,12 +23,10 @@ from django.forms.formsets import ( all_valid, formset_factory, ) -from django.forms.renderers import TemplatesSetting, get_default_renderer +from django.forms.renderers import TemplatesSetting from django.forms.utils import ErrorList from django.forms.widgets import HiddenInput from django.test import SimpleTestCase -from django.test.utils import isolate_lru_cache -from django.utils.deprecation import RemovedInDjango50Warning from . import jinja2_tests @@ -1900,28 +1898,3 @@ class AllValidTests(SimpleTestCase): ] self.assertEqual(formset1._errors, expected_errors) self.assertEqual(formset2._errors, expected_errors) - - -class DeprecationTests(SimpleTestCase): - def test_warning(self): - from django.forms.utils import DEFAULT_TEMPLATE_DEPRECATION_MSG - - with isolate_lru_cache(get_default_renderer), self.settings( - FORM_RENDERER="django.forms.renderers.DjangoTemplates" - ), self.assertRaisesMessage( - RemovedInDjango50Warning, DEFAULT_TEMPLATE_DEPRECATION_MSG - ): - ChoiceFormSet = formset_factory(Choice) - formset = ChoiceFormSet() - str(formset) - - def test_no_management_form_warning(self): - """ - Management forms are already rendered with the new div template. - """ - with isolate_lru_cache(get_default_renderer), self.settings( - FORM_RENDERER="django.forms.renderers.DjangoTemplates" - ): - ChoiceFormSet = formset_factory(Choice, formset=BaseFormSet) - formset = ChoiceFormSet() - str(formset.management_form) diff --git a/tests/runtests.py b/tests/runtests.py index b678988391..db873e2c3d 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -253,9 +253,6 @@ def setup_collect_tests(start_at, start_after, test_labels=None): "fields.W907", ] - # RemovedInDjango50Warning - settings.FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer" - # Load all the ALWAYS_INSTALLED_APPS. django.setup()