Index: django/template/__init__.py
===================================================================
--- django/template/__init__.py	(revision 12973)
+++ django/template/__init__.py	(working copy)
@@ -63,6 +63,7 @@
 from django.utils.safestring import SafeData, EscapeData, mark_safe, mark_for_escaping
 from django.utils.formats import localize
 from django.utils.html import escape
+from django.utils.module_loading import module_has_submodule
 
 __all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
 
@@ -988,12 +989,13 @@
     # an actual import problem with the module.
     app_path, taglib = taglib_module.rsplit('.',1)
     app_module = import_module(app_path)
-    try:
-        imp.find_module(taglib, app_module.__path__)
-    except ImportError,e:
+    if not module_has_submodule(app_module, taglib):
         return None
-    mod = import_module(taglib_module)
     try:
+        mod = import_module(taglib_module)
+    except ImportError, e:
+        raise InvalidTemplateLibrary("ImportError raised loading %s: %s" % (taglib_module, e))
+    try:
         return mod.register
     except AttributeError:
         raise InvalidTemplateLibrary("Template library %s does not have a variable named 'register'" % taglib_module)
Index: tests/regressiontests/templates/eggs/tagsegg.egg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tests\regressiontests\templates\eggs\tagsegg.egg
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tests/regressiontests/templates/tests.py
===================================================================
--- tests/regressiontests/templates/tests.py	(revision 12973)
+++ tests/regressiontests/templates/tests.py	(working copy)
@@ -1287,5 +1287,48 @@
             'autoescape-filtertag01': ("{{ first }}{% filter safe %}{{ first }} x<y{% endfilter %}", {"first": "<a>"}, template.TemplateSyntaxError),
         }
 
+
+class TemplateTagLoading(unittest.TestCase):
+
+    def setUp(self):
+        self.old_path = sys.path
+        self.old_apps = settings.INSTALLED_APPS
+        self.egg_dir = '%s/eggs' % os.path.dirname(__file__)
+        self.old_tag_modules = template.templatetags_modules
+        template.templatetags_modules = []
+
+    def tearDown(self):
+        settings.INSTALLED_APPS = self.old_apps
+        sys.path = self.old_path
+        template.templatetags_modules = self.old_tag_modules
+
+    def test_load_error(self):
+        ttext = "{% load broken_tag %}"
+        self.assertRaises(template.TemplateSyntaxError, template.Template, ttext)
+        try:
+            template.Template(ttext)
+        except template.TemplateSyntaxError, e:
+            self.assertTrue('ImportError' in e.args[0])
+            self.assertTrue('Xtemplate' in e.args[0])
+
+    def test_load_error_egg(self):
+        ttext = "{% load broken_egg %}"
+        egg_name = '%s/tagsegg.egg' % self.egg_dir
+        sys.path.append(egg_name)
+        settings.INSTALLED_APPS = ('tagsegg',)
+        self.assertRaises(template.TemplateSyntaxError, template.Template, ttext)
+        try:
+            template.Template(ttext)
+        except template.TemplateSyntaxError, e:
+            self.assertTrue('ImportError' in e.args[0])
+            self.assertTrue('Xtemplate' in e.args[0])
+
+    def test_load_working_egg(self):
+        ttext = "{% load working_egg %}"
+        egg_name = '%s/tagsegg.egg' % self.egg_dir
+        sys.path.append(egg_name)
+        settings.INSTALLED_APPS = ('tagsegg',)
+        t = template.Template(ttext)
+
 if __name__ == "__main__":
     unittest.main()
Index: tests/regressiontests/templates/templatetags/broken_tag.py
===================================================================
--- tests/regressiontests/templates/templatetags/broken_tag.py	(revision 0)
+++ tests/regressiontests/templates/templatetags/broken_tag.py	(revision 0)
@@ -0,0 +1 @@
+from django import Xtemplate

Property changes on: tests\regressiontests\templates\templatetags\broken_tag.py
___________________________________________________________________
Added: svn:eol-style
   + native

