Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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

Thanks jdunck for the suggestion.
  • Loading branch information...
commit 8625c7aab3760d16572792fea23a95e572e28ead 1 parent e1266e5
@prestontimmons prestontimmons authored timgraham committed
View
1  django/template/base.py
@@ -124,6 +124,7 @@ def __init__(self, template_string, origin=None,
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:
View
37 docs/ref/templates/api.txt
@@ -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
View
4 docs/releases/1.7.txt
@@ -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
=====================================
View
13 tests/template_tests/tests.py
@@ -236,6 +236,19 @@ def test_loader_debug_origin(self):
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):
"""
Please sign in to comment.
Something went wrong with that request. Please try again.