Index: django/template/defaultfilters.py =================================================================== --- django/template/defaultfilters.py (revision 2928) +++ django/template/defaultfilters.py (working copy) @@ -246,6 +246,13 @@ "Returns a random item from the list" return random_module.choice(value) +def get(value, arg): + "Returns an item from an idexable item" + try: + return value[arg] + except LookupError: + return value # Fail silently. + def slice_(value, arg): """ Returns a slice of the list. @@ -473,6 +480,7 @@ register.filter(removetags) register.filter(random) register.filter(rjust) +register.filter(get) register.filter('slice', slice_) register.filter(slugify) register.filter(stringformat) Index: tests/othertests/defaultfilters.py =================================================================== --- tests/othertests/defaultfilters.py (revision 2928) +++ tests/othertests/defaultfilters.py (working copy) @@ -173,6 +173,30 @@ >>> length_is('a', 10) False +>>> get([1, 2, 3], 0) +1 + +>>> get([1, 2, 3], 1) +2 + +>>> get([1, 2, 3], 2) +3 + +>>> get([1, 2, 3], 3) +[1, 2, 3] + +>>> get({'a': 1, 'c': 3, 'e': 5}, 'a') +1 + +>>> get({'a': 1, 'c': 3, 'e': 5}, 'c') +3 + +>>> get({'a': 1, 'c': 3, 'e': 5}, 'e') +5 + +>>> get({'a': 1, 'c': 3, 'e': 5}, 'g') +{'a': 1, 'c': 3, 'e': 5} + >>> slice_('abcdefg', '0') ''