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
This commit is contained in:
parent
e308cfc0e1
commit
c5dcba4159
|
@ -7,7 +7,7 @@ from decimal import Decimal, InvalidOperation, Context, ROUND_HALF_UP
|
|||
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):
|
||||
|
|
|
@ -368,6 +368,13 @@ class DefaultFiltersTests(TestCase):
|
|||
[('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 @@ class DefaultFiltersTests(TestCase):
|
|||
[('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'')
|
||||
|
|
Loading…
Reference in New Issue