From 7d5e35cdb46124e2471833b9570add1a00a1d9e0 Mon Sep 17 00:00:00 2001
From: Julien Phalip <jphalip@gmail.com>
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):