Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Made dictsort and dictsort reversed template filters fail silently

when passed list of things that aren't dictionaries.

Thanks Harris Lapiroff for the report and Daniel Barreto for the patch.

Fixes #15652.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17374 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit c5dcba4159e00ed7fc43b605946be489602ab369 1 parent e308cfc
@ramiro ramiro authored
View
12 django/template/defaultfilters.py
@@ -7,7 +7,7 @@
from functools import wraps
from pprint import pformat
-from django.template.base import Variable, Library
+from django.template.base import Variable, Library, VariableDoesNotExist
from django.conf import settings
from django.utils import formats
from django.utils.dateformat import format, time_format
@@ -490,7 +490,10 @@ def dictsort(value, arg):
Takes a list of dicts, returns that list sorted by the property given in
the argument.
"""
- return sorted(value, key=Variable(arg).resolve)
+ try:
+ return sorted(value, key=Variable(arg).resolve)
+ except (TypeError, VariableDoesNotExist):
+ return u''
@register.filter(is_safe=False)
def dictsortreversed(value, arg):
@@ -498,7 +501,10 @@ def dictsortreversed(value, arg):
Takes a list of dicts, returns that list sorted in reverse order by the
property given in the argument.
"""
- return sorted(value, key=Variable(arg).resolve, reverse=True)
+ try:
+ return sorted(value, key=Variable(arg).resolve, reverse=True)
+ except (TypeError, VariableDoesNotExist):
+ return u''
@register.filter(is_safe=False)
def first(value):
View
14 tests/regressiontests/defaultfilters/tests.py
@@ -368,6 +368,13 @@ def test_dictsort(self):
[('age', 23), ('name', 'Barbara-Ann')],
[('age', 63), ('name', 'Ra Ra Rasputin')]])
+ # If it gets passed a list of something else different from
+ # dictionaries it should fail silently
+ self.assertEqual(dictsort([1, 2, 3], 'age'), '')
+ self.assertEqual(dictsort('Hello!', 'age'), '')
+ self.assertEqual(dictsort({'a': 1}, 'age'), '')
+ self.assertEqual(dictsort(1, 'age'), '')
+
def test_dictsortreversed(self):
sorted_dicts = dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'},
{'age': 63, 'name': 'Ra Ra Rasputin'},
@@ -379,6 +386,13 @@ def test_dictsortreversed(self):
[('age', 23), ('name', 'Barbara-Ann')],
[('age', 18), ('name', 'Jonny B Goode')]])
+ # If it gets passed a list of something else different from
+ # dictionaries it should fail silently
+ self.assertEqual(dictsortreversed([1, 2, 3], 'age'), '')
+ self.assertEqual(dictsortreversed('Hello!', 'age'), '')
+ self.assertEqual(dictsortreversed({'a': 1}, 'age'), '')
+ self.assertEqual(dictsortreversed(1, 'age'), '')
+
def test_first(self):
self.assertEqual(first([0,1,2]), 0)
self.assertEqual(first(u''), u'')
Please sign in to comment.
Something went wrong with that request. Please try again.