Fixed #23261 -- Deprecated old style list support for unordered_list filter.

This commit is contained in:
Jaap Roes 2014-08-11 09:51:52 +02:00 committed by Tim Graham
parent 2e7be92b4d
commit e92b057e06
6 changed files with 43 additions and 13 deletions

View File

@ -6,11 +6,13 @@ import random as random_module
from decimal import Decimal, InvalidOperation, Context, ROUND_HALF_UP from decimal import Decimal, InvalidOperation, Context, ROUND_HALF_UP
from functools import wraps from functools import wraps
from pprint import pformat from pprint import pformat
import warnings
from django.template.base import Variable, Library, VariableDoesNotExist from django.template.base import Variable, Library, VariableDoesNotExist
from django.conf import settings from django.conf import settings
from django.utils import formats from django.utils import formats
from django.utils.dateformat import format, time_format from django.utils.dateformat import format, time_format
from django.utils.deprecation import RemovedInDjango20Warning
from django.utils.encoding import force_text, iri_to_uri from django.utils.encoding import force_text, iri_to_uri
from django.utils.html import (conditional_escape, escapejs, from django.utils.html import (conditional_escape, escapejs,
escape, urlize as _urlize, linebreaks, strip_tags, avoid_wrapping, escape, urlize as _urlize, linebreaks, strip_tags, avoid_wrapping,
@ -705,6 +707,11 @@ def unordered_list(value, autoescape=None):
i += 1 i += 1
return '\n'.join(output) return '\n'.join(output)
value, converted = convert_old_style_list(value) value, converted = convert_old_style_list(value)
if converted:
warnings.warn(
"The old style syntax in `unordered_list` is deprecated and will "
"be removed in Django 2.0. Use the the new format instead.",
RemovedInDjango20Warning)
return mark_safe(_helper(value)) return mark_safe(_helper(value))

View File

@ -42,6 +42,8 @@ about each item can often be found in the release notes of two versions prior.
* The ``error_message`` argument of ``django.forms.RegexField`` will be removed. * The ``error_message`` argument of ``django.forms.RegexField`` will be removed.
* The ``unordered_list`` filter will no longer support old style lists.
.. _deprecation-removed-in-1.9: .. _deprecation-removed-in-1.9:
1.9 1.9

View File

@ -2259,8 +2259,11 @@ contains ``['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]``, then
</ul> </ul>
</li> </li>
Note: An older, more restrictive and verbose input format is also supported: .. deprecated:: 1.8
``['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]``,
An older, more restrictive and verbose input format is also supported:
``['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]``.
Support for this syntax will be removed in Django 2.0.
.. templatefilter:: upper .. templatefilter:: upper

View File

@ -636,3 +636,15 @@ built-in tags. Simply remove ``'django.contrib.webdesign'`` from
It provided backwards compatibility for pre-1.0 code, but its functionality is It provided backwards compatibility for pre-1.0 code, but its functionality is
redundant. Use ``Field.error_messages['invalid']`` instead. redundant. Use ``Field.error_messages['invalid']`` instead.
Old :tfilter:`unordered_list` syntax
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
An older (pre-1.0), more restrictive and verbose input format for the
:tfilter:`unordered_list` template filter has been deprecated::
``['States', [['Kansas', [['Lawrence', []], ['Topeka', []]]], ['Illinois', []]]]``
Using the new syntax, this becomes::
``['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]``

View File

@ -4,6 +4,7 @@ from __future__ import unicode_literals
import datetime import datetime
import decimal import decimal
import unittest import unittest
import warnings
from django.template.defaultfilters import ( from django.template.defaultfilters import (
add, addslashes, capfirst, center, cut, date, default, default_if_none, add, addslashes, capfirst, center, cut, date, default, default_if_none,
@ -549,6 +550,9 @@ class DefaultFiltersTests(TestCase):
self.assertEqual(unordered_list([a, b]), '\t<li>ulitem-a</li>\n\t<li>ulitem-b</li>') self.assertEqual(unordered_list([a, b]), '\t<li>ulitem-a</li>\n\t<li>ulitem-b</li>')
# Old format for unordered lists should still work # Old format for unordered lists should still work
with warnings.catch_warnings(record=True):
warnings.simplefilter("always")
self.assertEqual(unordered_list(['item 1', []]), '\t<li>item 1</li>') self.assertEqual(unordered_list(['item 1', []]), '\t<li>item 1</li>')
self.assertEqual(unordered_list(['item 1', [['item 1.1', []]]]), self.assertEqual(unordered_list(['item 1', [['item 1.1', []]]]),

View File

@ -590,6 +590,8 @@ class TemplateTests(TestCase):
# Ignore deprecations of using the wrong number of variables with the 'for' tag. # Ignore deprecations of using the wrong number of variables with the 'for' tag.
# and warnings for {% url %} reversing by dotted path # and warnings for {% url %} reversing by dotted path
warnings.filterwarnings("ignore", category=RemovedInDjango20Warning, module="django.template.defaulttags") warnings.filterwarnings("ignore", category=RemovedInDjango20Warning, module="django.template.defaulttags")
# Ignore deprecations of old style unordered_list.
warnings.filterwarnings("ignore", category=RemovedInDjango20Warning, module="django.template.defaultfilters")
output = self.render(test_template, vals) output = self.render(test_template, vals)
except ShouldNotExecuteException: except ShouldNotExecuteException:
failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s', TEMPLATE_DEBUG=%s): %s -- FAILED. Template rendering invoked method that shouldn't have been invoked." % (is_cached, invalid_str, template_debug, name)) failures.append("Template test (Cached='%s', TEMPLATE_STRING_IF_INVALID='%s', TEMPLATE_DEBUG=%s): %s -- FAILED. Template rendering invoked method that shouldn't have been invoked." % (is_cached, invalid_str, template_debug, name))