From 7d5e35cdb46124e2471833b9570add1a00a1d9e0 Mon Sep 17 00:00:00 2001 From: Julien Phalip Date: Thu, 14 Feb 2013 23:29:15 -0800 Subject: [PATCH] Fixed #19829 -- Fixed index lookups for NumPy arrays in templates. --- django/template/base.py | 2 +- tests/regressiontests/templates/tests.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/django/template/base.py b/django/template/base.py index 9577d586d8..f43194de4a 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 8d2a45b8fc..255671435a 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):