Index: django/template/__init__.py
===================================================================
--- django/template/__init__.py	(revision 11638)
+++ django/template/__init__.py	(working copy)
@@ -139,6 +139,9 @@
 class InvalidTemplateLibrary(Exception):
     pass
 
+class AttributeLookupError(Exception):
+    pass
+
 class Origin(object):
     def __init__(self, name):
         self.name = name
@@ -713,7 +716,10 @@
                 current = current[bit]
             except (TypeError, AttributeError, KeyError):
                 try: # attribute lookup
-                    current = getattr(current, bit)
+                    try:
+                        current = getattr(current, bit)
+                    except AttributeError, e:
+                        raise AttributeLookupError(e)
                     if callable(current):
                         if getattr(current, 'alters_data', False):
                             current = settings.TEMPLATE_STRING_IF_INVALID
@@ -724,12 +730,14 @@
                                 # GOTCHA: This will also catch any TypeError
                                 # raised in the function itself.
                                 current = settings.TEMPLATE_STRING_IF_INVALID # invalid method call
+                            except AttributeError:
+                                raise
                             except Exception, e:
                                 if getattr(e, 'silent_variable_failure', False):
                                     current = settings.TEMPLATE_STRING_IF_INVALID
                                 else:
                                     raise
-                except (TypeError, AttributeError):
+                except (TypeError, AttributeLookupError):
                     try: # list-index lookup
                         current = current[int(bit)]
                     except (IndexError, # list index out of range
Index: tests/regressiontests/templates/tests.py
===================================================================
--- tests/regressiontests/templates/tests.py	(revision 11638)
+++ tests/regressiontests/templates/tests.py	(working copy)
@@ -88,6 +88,9 @@
 
     def method4(self):
         raise SomeOtherException
+    
+    def method5(self):
+        raise AttributeError("callable exists but raises this")
 
 class OtherClass:
     def method(self):
@@ -303,7 +306,7 @@
 
             # Fail silently when a variable's attribute isn't found
             'basic-syntax11': ("{{ var.blech }}", {"var": SomeClass()}, ("","INVALID")),
-
+                
             # Raise TemplateSyntaxError when trying to access a variable beginning with an underscore
             'basic-syntax12': ("{{ var.__dict__ }}", {"var": SomeClass()}, template.TemplateSyntaxError),
 
@@ -340,6 +343,10 @@
             'basic-syntax25': ('{{ "fred" }}', {}, "fred"),
             'basic-syntax26': (r'{{ "\"fred\"" }}', {}, "\"fred\""),
             'basic-syntax27': (r'{{ _("\"fred\"") }}', {}, "\"fred\""),
+                
+            # Don't fail silently if variable did exist but raised an
+            # AttributeError on execution
+            'basic-syntax28': ("{{ var.method5 }}", {"var": SomeClass()}, AttributeError),
 
             # List-index syntax allows a template to access a certain item of a subscriptable object.
             'list-index01': ("{{ var.1 }}", {"var": ["first item", "second item"]}, "second item"),
