Commit c5a899b1 authored by Aymeric Augustin's avatar Aymeric Augustin
Browse files

Fixed #16787 -- Restored the ability to {% load %} template tags libraries...

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
parent 19e54084
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -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 <appdir>/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" %
+3 −2
Original line number Diff line number Diff line
@@ -698,9 +698,10 @@ load
Loads a custom template tag set.

For example, the following template would load all the tags and filters
registered in ``somelibrary`` and ``otherlibrary``::
registered in ``somelibrary`` and ``otherlibrary`` located in package
``package``::

    {% load somelibrary otherlibrary %}
    {% load somelibrary package.otherlibrary %}

.. versionchanged:: 1.3

+0 −0

Empty file added.

+7 −0
Original line number Diff line number Diff line
from django import template

register = template.Library()

@register.simple_tag
def echo2(arg):
    return arg
+1 −0
Original line number Diff line number Diff line
import nonexistent.module
Loading