Author: russellm
Date: 2006-08-27 07:35:07 -0500 (Sun, 27 Aug 2006)
New Revision: 3659

Added:
   django/trunk/django/template/signals.py
Modified:
   django/trunk/django/template/__init__.py
   django/trunk/django/template/defaulttags.py
   django/trunk/django/template/loader.py
   django/trunk/django/template/loader_tags.py
   django/trunk/django/views/debug.py
   django/trunk/django/views/static.py
Log:
Refs #2333 - Added a signal that is emitted whenever a template is rendered, 
and added a 'name' field to Template to allow easy identification of templates.


Modified: django/trunk/django/template/__init__.py
===================================================================
--- django/trunk/django/template/__init__.py    2006-08-27 12:24:59 UTC (rev 
3658)
+++ django/trunk/django/template/__init__.py    2006-08-27 12:35:07 UTC (rev 
3659)
@@ -60,6 +60,8 @@
 from django.template.context import Context, RequestContext, 
ContextPopException
 from django.utils.functional import curry
 from django.utils.text import smart_split
+from django.dispatch import dispatcher
+from django.template import signals
 
 __all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
 
@@ -137,13 +139,14 @@
         return self.source
 
 class Template(object):
-    def __init__(self, template_string, origin=None):
+    def __init__(self, template_string, origin=None, name='<Unknown 
Template>'):
         "Compilation stage"
         if settings.TEMPLATE_DEBUG and origin == None:
             origin = StringOrigin(template_string)
             # Could do some crazy stack-frame stuff to record where this string
             # came from...
         self.nodelist = compile_string(template_string, origin)
+        self.name = name
 
     def __iter__(self):
         for node in self.nodelist:
@@ -152,6 +155,7 @@
 
     def render(self, context):
         "Display stage -- can be called many times"
+        dispatcher.send(signal=signals.template_rendered, sender=self, 
template=self, context=context)
         return self.nodelist.render(context)
 
 def compile_string(template_string, origin):

Modified: django/trunk/django/template/defaulttags.py
===================================================================
--- django/trunk/django/template/defaulttags.py 2006-08-27 12:24:59 UTC (rev 
3658)
+++ django/trunk/django/template/defaulttags.py 2006-08-27 12:35:07 UTC (rev 
3659)
@@ -251,7 +251,7 @@
             output = ''
         if self.parsed:
             try:
-                t = Template(output)
+                t = Template(output, name=self.filepath)
                 return t.render(context)
             except TemplateSyntaxError, e:
                 if settings.DEBUG:

Modified: django/trunk/django/template/loader.py
===================================================================
--- django/trunk/django/template/loader.py      2006-08-27 12:24:59 UTC (rev 
3658)
+++ django/trunk/django/template/loader.py      2006-08-27 12:35:07 UTC (rev 
3659)
@@ -76,14 +76,16 @@
     Returns a compiled Template object for the given template name,
     handling template inheritance recursively.
     """
-    return get_template_from_string(*find_template_source(template_name))
+    source, origin = find_template_source(template_name)
+    template = get_template_from_string(source, origin, template_name)
+    return template
 
-def get_template_from_string(source, origin=None):
+def get_template_from_string(source, origin=None, name=None):
     """
     Returns a compiled Template object for the given template code,
     handling template inheritance recursively.
     """
-    return Template(source, origin)
+    return Template(source, origin, name)
 
 def render_to_string(template_name, dictionary=None, context_instance=None):
     """

Modified: django/trunk/django/template/loader_tags.py
===================================================================
--- django/trunk/django/template/loader_tags.py 2006-08-27 12:24:59 UTC (rev 
3658)
+++ django/trunk/django/template/loader_tags.py 2006-08-27 12:35:07 UTC (rev 
3659)
@@ -57,7 +57,7 @@
         except TemplateDoesNotExist:
             raise TemplateSyntaxError, "Template %r cannot be extended, 
because it doesn't exist" % parent
         else:
-            return get_template_from_string(source, origin)
+            return get_template_from_string(source, origin, parent)
 
     def render(self, context):
         compiled_parent = self.get_parent(context)

Added: django/trunk/django/template/signals.py
===================================================================
--- django/trunk/django/template/signals.py                             (rev 0)
+++ django/trunk/django/template/signals.py     2006-08-27 12:35:07 UTC (rev 
3659)
@@ -0,0 +1 @@
+template_rendered=object()
\ No newline at end of file

Modified: django/trunk/django/views/debug.py
===================================================================
--- django/trunk/django/views/debug.py  2006-08-27 12:24:59 UTC (rev 3658)
+++ django/trunk/django/views/debug.py  2006-08-27 12:35:07 UTC (rev 3659)
@@ -115,7 +115,7 @@
             'function': '?',
             'lineno': '?',
         }]
-    t = Template(TECHNICAL_500_TEMPLATE)
+    t = Template(TECHNICAL_500_TEMPLATE, name='Technical 500 Template')
     c = Context({
         'exception_type': exc_type.__name__,
         'exception_value': exc_value,
@@ -141,7 +141,7 @@
             # tried exists but is an empty list. The URLconf must've been 
empty.
             return empty_urlconf(request)
 
-    t = Template(TECHNICAL_404_TEMPLATE)
+    t = Template(TECHNICAL_404_TEMPLATE, name='Technical 404 Template')
     c = Context({
         'root_urlconf': settings.ROOT_URLCONF,
         'urlpatterns': tried,
@@ -154,7 +154,7 @@
 
 def empty_urlconf(request):
     "Create an empty URLconf 404 error response."
-    t = Template(EMPTY_URLCONF_TEMPLATE)
+    t = Template(EMPTY_URLCONF_TEMPLATE, name='Empty URLConf Template')
     c = Context({
         'project_name': settings.SETTINGS_MODULE.split('.')[0]
     })

Modified: django/trunk/django/views/static.py
===================================================================
--- django/trunk/django/views/static.py 2006-08-27 12:24:59 UTC (rev 3658)
+++ django/trunk/django/views/static.py 2006-08-27 12:35:07 UTC (rev 3659)
@@ -81,7 +81,7 @@
     try:
         t = loader.get_template('static/directory_index')
     except TemplateDoesNotExist:
-        t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE)
+        t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name='Default Directory 
Index Template')
     files = []
     for f in os.listdir(fullpath):
         if not f.startswith('.'):


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates
-~----------~----~----~----~------~----~------~--~---

Reply via email to