Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Refs #2333 - Added a signal that is emitted whenever a template is re…

…ndered, and added a 'name' field to Template to allow easy identification of templates.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@3659 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 89fa97b8374131614698bbab1544f9bdafdb66bd 1 parent 7dce86c
Russell Keith-Magee authored August 27, 2006
6  django/template/__init__.py
@@ -60,6 +60,8 @@
60 60
 from django.template.context import Context, RequestContext, ContextPopException
61 61
 from django.utils.functional import curry
62 62
 from django.utils.text import smart_split
  63
+from django.dispatch import dispatcher
  64
+from django.template import signals
63 65
 
64 66
 __all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
65 67
 
@@ -137,13 +139,14 @@ def reload(self):
137 139
         return self.source
138 140
 
139 141
 class Template(object):
140  
-    def __init__(self, template_string, origin=None):
  142
+    def __init__(self, template_string, origin=None, name='<Unknown Template>'):
141 143
         "Compilation stage"
142 144
         if settings.TEMPLATE_DEBUG and origin == None:
143 145
             origin = StringOrigin(template_string)
144 146
             # Could do some crazy stack-frame stuff to record where this string
145 147
             # came from...
146 148
         self.nodelist = compile_string(template_string, origin)
  149
+        self.name = name
147 150
 
148 151
     def __iter__(self):
149 152
         for node in self.nodelist:
@@ -152,6 +155,7 @@ def __iter__(self):
152 155
 
153 156
     def render(self, context):
154 157
         "Display stage -- can be called many times"
  158
+        dispatcher.send(signal=signals.template_rendered, sender=self, template=self, context=context)
155 159
         return self.nodelist.render(context)
156 160
 
157 161
 def compile_string(template_string, origin):
2  django/template/defaulttags.py
@@ -251,7 +251,7 @@ def render(self, context):
251 251
             output = ''
252 252
         if self.parsed:
253 253
             try:
254  
-                t = Template(output)
  254
+                t = Template(output, name=self.filepath)
255 255
                 return t.render(context)
256 256
             except TemplateSyntaxError, e:
257 257
                 if settings.DEBUG:
8  django/template/loader.py
@@ -76,14 +76,16 @@ def get_template(template_name):
76 76
     Returns a compiled Template object for the given template name,
77 77
     handling template inheritance recursively.
78 78
     """
79  
-    return get_template_from_string(*find_template_source(template_name))
  79
+    source, origin = find_template_source(template_name)
  80
+    template = get_template_from_string(source, origin, template_name)
  81
+    return template
80 82
 
81  
-def get_template_from_string(source, origin=None):
  83
+def get_template_from_string(source, origin=None, name=None):
82 84
     """
83 85
     Returns a compiled Template object for the given template code,
84 86
     handling template inheritance recursively.
85 87
     """
86  
-    return Template(source, origin)
  88
+    return Template(source, origin, name)
87 89
 
88 90
 def render_to_string(template_name, dictionary=None, context_instance=None):
89 91
     """
2  django/template/loader_tags.py
@@ -57,7 +57,7 @@ def get_parent(self, context):
57 57
         except TemplateDoesNotExist:
58 58
             raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
59 59
         else:
60  
-            return get_template_from_string(source, origin)
  60
+            return get_template_from_string(source, origin, parent)
61 61
 
62 62
     def render(self, context):
63 63
         compiled_parent = self.get_parent(context)
1  django/template/signals.py
... ...
@@ -0,0 +1 @@
  1
+template_rendered=object()
6  django/views/debug.py
@@ -115,7 +115,7 @@ def technical_500_response(request, exc_type, exc_value, tb):
115 115
             'function': '?',
116 116
             'lineno': '?',
117 117
         }]
118  
-    t = Template(TECHNICAL_500_TEMPLATE)
  118
+    t = Template(TECHNICAL_500_TEMPLATE, name='Technical 500 Template')
119 119
     c = Context({
120 120
         'exception_type': exc_type.__name__,
121 121
         'exception_value': exc_value,
@@ -141,7 +141,7 @@ def technical_404_response(request, exception):
141 141
             # tried exists but is an empty list. The URLconf must've been empty.
142 142
             return empty_urlconf(request)
143 143
 
144  
-    t = Template(TECHNICAL_404_TEMPLATE)
  144
+    t = Template(TECHNICAL_404_TEMPLATE, name='Technical 404 Template')
145 145
     c = Context({
146 146
         'root_urlconf': settings.ROOT_URLCONF,
147 147
         'urlpatterns': tried,
@@ -154,7 +154,7 @@ def technical_404_response(request, exception):
154 154
 
155 155
 def empty_urlconf(request):
156 156
     "Create an empty URLconf 404 error response."
157  
-    t = Template(EMPTY_URLCONF_TEMPLATE)
  157
+    t = Template(EMPTY_URLCONF_TEMPLATE, name='Empty URLConf Template')
158 158
     c = Context({
159 159
         'project_name': settings.SETTINGS_MODULE.split('.')[0]
160 160
     })
2  django/views/static.py
@@ -81,7 +81,7 @@ def directory_index(path, fullpath):
81 81
     try:
82 82
         t = loader.get_template('static/directory_index')
83 83
     except TemplateDoesNotExist:
84  
-        t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE)
  84
+        t = Template(DEFAULT_DIRECTORY_INDEX_TEMPLATE, name='Default Directory Index Template')
85 85
     files = []
86 86
     for f in os.listdir(fullpath):
87 87
         if not f.startswith('.'):

0 notes on commit 89fa97b

Please sign in to comment.
Something went wrong with that request. Please try again.