summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorMoritz Sichert <moritz.sichert@googlemail.com>2015-03-18 21:42:59 +0100
committerTim Graham <timograham@gmail.com>2015-03-27 20:01:41 -0400
commit44a05a8a912596c44f37f050dcde85b45827b3b6 (patch)
tree237d32eff118beb88ebbb0c29eaff456978bdbfa /django/forms
parent6a2f46f2381269187195a0f9165a893f54dc01a3 (diff)
[1.8.x] Fixed #24469 -- Refined escaping of Django's form elements in non-Django templates.
Backport of 1f2abf784a9fe550959de242d91963b2ad6f7e9c from master
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/forms.py10
-rw-r--r--django/forms/formsets.py2
-rw-r--r--django/forms/utils.py4
-rw-r--r--django/forms/widgets.py9
4 files changed, 13 insertions, 12 deletions
diff --git a/django/forms/forms.py b/django/forms/forms.py
index 869cc83283..bad1843bb0 100644
--- a/django/forms/forms.py
+++ b/django/forms/forms.py
@@ -18,7 +18,7 @@ from django.utils.deprecation import RemovedInDjango19Warning
from django.utils.encoding import (
force_text, python_2_unicode_compatible, smart_text,
)
-from django.utils.html import conditional_escape, format_html
+from django.utils.html import conditional_escape, format_html, html_safe
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
@@ -108,6 +108,7 @@ class DeclarativeFieldsMetaclass(MediaDefiningClass):
return new_class
+@html_safe
@python_2_unicode_compatible
class BaseForm(object):
# This is the main implementation of all the Form logic. Note that this
@@ -138,9 +139,6 @@ class BaseForm(object):
self.fields = copy.deepcopy(self.base_fields)
self._bound_fields_cache = {}
- def __html__(self):
- return force_text(self)
-
def __str__(self):
return self.as_table()
@@ -520,6 +518,7 @@ class Form(six.with_metaclass(DeclarativeFieldsMetaclass, BaseForm)):
# BaseForm itself has no way of designating self.fields.
+@html_safe
@python_2_unicode_compatible
class BoundField(object):
"A Field plus data"
@@ -537,9 +536,6 @@ class BoundField(object):
self.help_text = field.help_text or ''
self._initial_value = UNSET
- def __html__(self):
- return force_text(self)
-
def __str__(self):
"""Renders this field as an HTML widget."""
if self.field.show_hidden_initial:
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index adacd00fdc..eafe35720f 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -8,6 +8,7 @@ from django.forms.widgets import HiddenInput
from django.utils import six
from django.utils.encoding import python_2_unicode_compatible
from django.utils.functional import cached_property
+from django.utils.html import html_safe
from django.utils.safestring import mark_safe
from django.utils.six.moves import range
from django.utils.translation import ugettext as _, ungettext
@@ -46,6 +47,7 @@ class ManagementForm(Form):
super(ManagementForm, self).__init__(*args, **kwargs)
+@html_safe
@python_2_unicode_compatible
class BaseFormSet(object):
"""
diff --git a/django/forms/utils.py b/django/forms/utils.py
index 73a18622c1..717c3d0606 100644
--- a/django/forms/utils.py
+++ b/django/forms/utils.py
@@ -9,7 +9,7 @@ from django.conf import settings
from django.core.exceptions import ValidationError
from django.utils import six, timezone
from django.utils.encoding import force_text, python_2_unicode_compatible
-from django.utils.html import escape, format_html, format_html_join
+from django.utils.html import escape, format_html, format_html_join, html_safe
from django.utils.translation import ugettext_lazy as _
try:
@@ -42,6 +42,7 @@ def flatatt(attrs):
)
+@html_safe
@python_2_unicode_compatible
class ErrorDict(dict):
"""
@@ -74,6 +75,7 @@ class ErrorDict(dict):
return self.as_ul()
+@html_safe
@python_2_unicode_compatible
class ErrorList(UserList, list):
"""
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index 811852bb0b..43a88463ba 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -12,7 +12,7 @@ from django.forms.utils import flatatt, to_current_timezone
from django.utils import formats, six
from django.utils.datastructures import MergeDict, MultiValueDict
from django.utils.encoding import force_text, python_2_unicode_compatible
-from django.utils.html import conditional_escape, format_html
+from django.utils.html import conditional_escape, format_html, html_safe
from django.utils.safestring import mark_safe
from django.utils.six.moves.urllib.parse import urljoin
from django.utils.translation import ugettext_lazy
@@ -30,6 +30,7 @@ __all__ = (
MEDIA_TYPES = ('css', 'js')
+@html_safe
@python_2_unicode_compatible
class Media(object):
def __init__(self, media=None, **kwargs):
@@ -44,9 +45,6 @@ class Media(object):
for name in MEDIA_TYPES:
getattr(self, 'add_' + name)(media_attrs.get(name, None))
- def __html__(self):
- return force_text(self)
-
def __str__(self):
return self.render()
@@ -152,6 +150,7 @@ class MediaDefiningClass(type):
return new_class
+@html_safe
@python_2_unicode_compatible
class SubWidget(object):
"""
@@ -595,6 +594,7 @@ class SelectMultiple(Select):
return data.get(name, None)
+@html_safe
@python_2_unicode_compatible
class ChoiceInput(SubWidget):
"""
@@ -660,6 +660,7 @@ class CheckboxChoiceInput(ChoiceInput):
return self.choice_value in self.value
+@html_safe
@python_2_unicode_compatible
class ChoiceFieldRenderer(object):
"""