Fixed #16096 -- Added origin attribute to template instances.
Thanks jdunck for the suggestion.
This commit is contained in:
parent
e1266e50b2
commit
8625c7aab3
|
@ -124,6 +124,7 @@ class Template(object):
|
||||||
origin = StringOrigin(template_string)
|
origin = StringOrigin(template_string)
|
||||||
self.nodelist = compile_string(template_string, origin)
|
self.nodelist = compile_string(template_string, origin)
|
||||||
self.name = name
|
self.name = name
|
||||||
|
self.origin = origin
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for node in self.nodelist:
|
for node in self.nodelist:
|
||||||
|
|
|
@ -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
|
:setting:`TEMPLATE_LOADERS` setting. It uses each loader until a loader finds a
|
||||||
match.
|
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
|
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
|
To cut down on the repetitive nature of loading and rendering
|
||||||
templates, Django provides a shortcut function which largely
|
templates, Django provides a shortcut function which largely
|
||||||
|
|
|
@ -272,6 +272,10 @@ Templates
|
||||||
|
|
||||||
* It is now possible to :ttag:`include` templates recursively.
|
* 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
|
Backwards incompatible changes in 1.7
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
|
|
|
@ -236,6 +236,19 @@ class TemplateLoaderTests(TestCase):
|
||||||
loader.template_source_loaders = old_loaders
|
loader.template_source_loaders = old_loaders
|
||||||
settings.TEMPLATE_DEBUG = old_td
|
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):
|
def test_include_missing_template(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue