Commit 8625c7aa authored by Preston Timmons's avatar Preston Timmons Committed by Tim Graham
Browse files

Fixed #16096 -- Added origin attribute to template instances.

Thanks jdunck for the suggestion.
parent e1266e50
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ class Template(object):
            origin = StringOrigin(template_string)
        self.nodelist = compile_string(template_string, origin)
        self.name = name
        self.origin = origin

    def __iter__(self):
        for node in self.nodelist:
+36 −1
Original line number Diff line number Diff line
@@ -759,10 +759,45 @@ Django uses the template loaders in order according to the
:setting:`TEMPLATE_LOADERS` setting. It uses each loader until a loader finds a
match.

.. currentmodule:: django.template

Template origin
~~~~~~~~~~~~~~~

.. versionadded:: 1.7

When :setting:`TEMPLATE_DEBUG` is ``True`` template objects will have an
``origin`` attribute depending on the source they are loaded from.

.. class:: loader.LoaderOrigin

    Templates created from a template loader will use the
    ``django.template.loader.LoaderOrigin`` class.

    .. attribute:: name

        The path to the template as returned by the template loader.
        For loaders that read from the file system, this is the full
        path to the template.

    .. attribute:: loadname

        The relative path to the template as passed into the
        template loader.

.. class:: StringOrigin

    Templates created from a ``Template`` class will use the
    ``django.template.StringOrigin`` class.

    .. attribute:: source

        The string used to create the template.

The ``render_to_string`` shortcut
===================================

.. function:: django.template.loader.render_to_string(template_name, dictionary=None, context_instance=None)
.. function:: loader.render_to_string(template_name, dictionary=None, context_instance=None)

To cut down on the repetitive nature of loading and rendering
templates, Django provides a shortcut function which largely
+4 −0
Original line number Diff line number Diff line
@@ -272,6 +272,10 @@ Templates

* It is now possible to :ttag:`include` templates recursively.

* Template objects now have an origin attribute set when
  :setting:`TEMPLATE_DEBUG` is ``True``. This allows template origins to be
  inspected and logged outside of the ``django.template`` infrastructure.

Backwards incompatible changes in 1.7
=====================================

+13 −0
Original line number Diff line number Diff line
@@ -236,6 +236,19 @@ class TemplateLoaderTests(TestCase):
            loader.template_source_loaders = old_loaders
            settings.TEMPLATE_DEBUG = old_td

    def test_loader_origin(self):
        with self.settings(TEMPLATE_DEBUG=True):
            template = loader.get_template('login.html')
            self.assertEqual(template.origin.loadname, 'login.html')

    def test_string_origin(self):
        with self.settings(TEMPLATE_DEBUG=True):
            template = Template('string template')
            self.assertEqual(template.origin.source, 'string template')

    def test_debug_false_origin(self):
        template = loader.get_template('login.html')
        self.assertEqual(template.origin, None)

    def test_include_missing_template(self):
        """