summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoam <noamkush@gmail.com>2015-06-25 13:46:11 +0300
committerTim Graham <timograham@gmail.com>2015-06-27 09:37:41 -0400
commite291fc4757e952fd4f663d88adca416b016db13e (patch)
treeb94ca22fdaa6c4b1d6178e781099643c53d690e1
parent2e70bf37854e39d46557317fb4098da5261618d5 (diff)
downloaddjango-e291fc4757e952fd4f663d88adca416b016db13e.tar.gz
Fixed #25031 -- Fixed a regression in the unordered_list template filter.
-rw-r--r--django/template/defaultfilters.py35
-rw-r--r--docs/releases/1.8.3.txt3
-rw-r--r--tests/template_tests/filter_tests/test_unordered_list.py7
3 files changed, 30 insertions, 15 deletions
diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
index 92e1a6ab78..5f5003b176 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -683,22 +683,27 @@ def unordered_list(value, autoescape=True):
def walk_items(item_list):
item_iterator = iter(item_list)
- for item in item_iterator:
- try:
- next_item = next(item_iterator)
- except StopIteration:
- next_item = None
- if not isinstance(next_item, six.string_types):
+ try:
+ item = next(item_iterator)
+ while True:
try:
- iter(next_item)
- except TypeError:
- pass
- else:
- yield item, next_item
- continue
- yield item, None
- if next_item:
- yield next_item, None
+ next_item = next(item_iterator)
+ except StopIteration:
+ yield item, None
+ break
+ if not isinstance(next_item, six.string_types):
+ try:
+ iter(next_item)
+ except TypeError:
+ pass
+ else:
+ yield item, next_item
+ item = next(item_iterator)
+ continue
+ yield item, None
+ item = next_item
+ except StopIteration:
+ pass
def list_formatter(item_list, tabs=1):
indent = '\t' * tabs
diff --git a/docs/releases/1.8.3.txt b/docs/releases/1.8.3.txt
index 3511a258a4..600291d902 100644
--- a/docs/releases/1.8.3.txt
+++ b/docs/releases/1.8.3.txt
@@ -89,3 +89,6 @@ Bugfixes
* Fixed inline forms that use a parent object that has a ``UUIDField`` primary
key and a child object that has an ``AutoField`` primary key
(:ticket:`24958`).
+
+* Fixed a regression in the ``unordered_list`` template filter on certain
+ inputs (:ticket:`25031`).
diff --git a/tests/template_tests/filter_tests/test_unordered_list.py b/tests/template_tests/filter_tests/test_unordered_list.py
index 77e5bab0c6..4fbc22a657 100644
--- a/tests/template_tests/filter_tests/test_unordered_list.py
+++ b/tests/template_tests/filter_tests/test_unordered_list.py
@@ -83,6 +83,13 @@ class FunctionTests(SimpleTestCase):
'</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>',
)
+ def test_nested3(self):
+ self.assertEqual(
+ unordered_list(['item 1', 'item 2', ['item 2.1']]),
+ '\t<li>item 1</li>\n\t<li>item 2\n\t<ul>\n\t\t<li>item 2.1'
+ '</li>\n\t</ul>\n\t</li>',
+ )
+
def test_nested_multiple(self):
self.assertEqual(
unordered_list(['item 1', ['item 1.1', ['item 1.1.1', ['item 1.1.1.1']]]]),