From c5a899b190d1afa798efade499e8d00a5286fa28 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Mon, 21 Nov 2011 10:28:12 +0000 Subject: Fixed #16787 -- Restored the ability to {% load %} template tags libraries within packages. Thanks Ivan Sagalaev for the report and patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17133 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/template/base.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'django/template') diff --git a/django/template/base.py b/django/template/base.py index 40a577dbd8..e23420b828 100644 --- a/django/template/base.py +++ b/django/template/base.py @@ -1215,6 +1215,22 @@ class Library(object): return func return dec +def is_library_missing(name): + """Check if library that failed to load cannot be found under any + templatetags directory or does exist but fails to import. + + Non-existing condition is checked recursively for each subpackage in cases + like /templatetags/subpackage/package/module.py. + """ + # Don't bother to check if '.' is in name since any name will be prefixed + # with some template root. + path, module = name.rsplit('.', 1) + try: + package = import_module(path) + return not module_has_submodule(package, module) + except ImportError: + return is_library_missing(path) + def import_library(taglib_module): """ Load a template tag library module. @@ -1222,8 +1238,6 @@ def import_library(taglib_module): Verifies that the library contains a 'register' attribute, and returns that attribute as the representation of the library """ - app_path, taglib = taglib_module.rsplit('.', 1) - app_module = import_module(app_path) try: mod = import_module(taglib_module) except ImportError, e: @@ -1231,7 +1245,7 @@ def import_library(taglib_module): # that's not an error that should be raised. If the submodule exists # and raised an ImportError on the attempt to load it, that we want # to raise. - if not module_has_submodule(app_module, taglib): + if is_library_missing(taglib_module): return None else: raise InvalidTemplateLibrary("ImportError raised loading %s: %s" % -- cgit v1.3