diff --git a/django/template/base.py b/django/template/base.py index 9577d586d80..f43194de4a0 100644 --- a/django/template/base.py +++ b/django/template/base.py @@ -763,7 +763,7 @@ class Variable(object): for bit in self.lookups: try: # dictionary lookup current = current[bit] - except (TypeError, AttributeError, KeyError): + except (TypeError, AttributeError, KeyError, ValueError): try: # attribute lookup current = getattr(current, bit) except (TypeError, AttributeError): diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 8d2a45b8fcc..255671435a2 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -54,6 +54,12 @@ except ImportError as e: else: raise +# NumPy installed? +try: + import numpy +except ImportError: + numpy = False + from . import filters ################################# @@ -1649,6 +1655,17 @@ class Templates(TestCase): 'verbatim-tag05': ('{% verbatim %}{% endverbatim %}{% verbatim %}{% endverbatim %}', {}, ''), 'verbatim-tag06': ("{% verbatim special %}Don't {% endverbatim %} just yet{% endverbatim special %}", {}, "Don't {% endverbatim %} just yet"), } + + if numpy: + tests.update({ + # Numpy's array-index syntax allows a template to access a certain item of a subscriptable object. + 'numpy-array-index01': ("{{ var.1 }}", {"var": numpy.array(["first item", "second item"])}, "second item"), + + # Fail silently when the array index is out of range. + 'numpy-array-index02': ("{{ var.5 }}", {"var": numpy.array(["first item", "second item"])}, ("", "INVALID")), + }) + + return tests class TemplateTagLoading(unittest.TestCase):