diff options
Diffstat (limited to 'debug_toolbar')
| -rw-r--r-- | debug_toolbar/media/toolbar.js | 63 | ||||
| -rw-r--r-- | debug_toolbar/panels/template.py | 28 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/base.html | 6 | ||||
| -rw-r--r-- | debug_toolbar/templates/debug_toolbar/panels/templates.html | 8 | ||||
| -rw-r--r-- | debug_toolbar/toolbar/loader.py | 5 |
5 files changed, 83 insertions, 27 deletions
diff --git a/debug_toolbar/media/toolbar.js b/debug_toolbar/media/toolbar.js index 8c0a86d..21994a9 100644 --- a/debug_toolbar/media/toolbar.js +++ b/debug_toolbar/media/toolbar.js @@ -1,15 +1,54 @@ jQuery.noConflict(); +(function(jQuery) { + jQuery.djDebug = function(data, klass) { + jQuery.djDebug.init(); + } + jQuery.extend(jQuery.djDebug, { + init: function() { + var current = null; + jQuery('#djDebugPanelList li a').click(function() { + current = jQuery('#djDebug #' + this.className); + if (current.is(':visible')) { + jQuery(document).trigger('close.djDebug'); + } else { + jQuery('.panelContent').hide(); + current.show(); + jQuery.djDebug.open(); + } + return false; + }); + jQuery('#djDebugTemplatePanel a.djTemplateShowContext').click(function() { + jQuery.djDebug.toggle_content(jQuery(this).parent().next()); + }); + jQuery('#djDebug a.close').click(function() { + jQuery(document).trigger('close.djDebug'); + return false; + }); + }, + open: function() { + jQuery(document).bind('keydown.djDebug', function(e) { + if (e.keyCode == 27) { + jQuery.djDebug.close(); + } + }); + }, + toggle_content: function(elem) { + if (elem.is(':visible')) { + elem.hide(); + } else { + elem.show(); + } + }, + close: function() { + jQuery(document).trigger('close.djDebug'); + return false; + } + }); + jQuery(document).bind('close.djDebug', function() { + jQuery(document).unbind('keydown.djDebug'); + jQuery('.panelContent').hide(); + }); +})(jQuery); jQuery(document).ready(function() { - var current = null; - jQuery('#djDebugPanelList li a').click(function() { - if (current) { current.hide(); } - current = jQuery('#djDebug #' + this.className); - current.show(); - return false; - }); - jQuery('#djDebug a.close').click(function() { - if (current) { current.hide(); } - current = null; - return false; - }) + jQuery.djDebug(); }); diff --git a/debug_toolbar/panels/template.py b/debug_toolbar/panels/template.py index f1cf65b..f02b673 100644 --- a/debug_toolbar/panels/template.py +++ b/debug_toolbar/panels/template.py @@ -32,11 +32,11 @@ class TemplateDebugPanel(DebugPanel): def __init__(self, request): super(TemplateDebugPanel, self).__init__(request) - self.templates_used = [] - template_rendered.connect(self._storeRenderedTemplates) + self.templates = [] + template_rendered.connect(self._storeTemplateInfo) - def _storeRenderedTemplates(self, sender, **kwargs): - self.templates_used.append(kwargs['template']) + def _storeTemplateInfo(self, sender, **kwargs): + self.templates.append(kwargs) def title(self): return 'Templates' @@ -45,12 +45,22 @@ class TemplateDebugPanel(DebugPanel): return '' def content(self): - templates = [ - (t.name, t.origin and t.origin.name or 'No origin') - for t in self.templates_used - ] + template_context = [] + for i, d in enumerate(self.templates): + info = {} + # Clean up some info about templates + t = d.get('template', None) + if t.origin and t.origin.name: + t.origin_name = t.origin.name + else: + t.origin_name = 'No origin' + info['template'] = t + # Clean up context for better readability + c = d.get('context', None) + info['context'] = '\n'.join([_d.__repr__() for _d in c.dicts]) + template_context.append(info) context = { - 'templates': templates, + 'templates': template_context, 'template_dirs': settings.TEMPLATE_DIRS, } return render_to_string('debug_toolbar/panels/templates.html', context) diff --git a/debug_toolbar/templates/debug_toolbar/base.html b/debug_toolbar/templates/debug_toolbar/base.html index 8ee29d2..4cc028c 100644 --- a/debug_toolbar/templates/debug_toolbar/base.html +++ b/debug_toolbar/templates/debug_toolbar/base.html @@ -1,7 +1,7 @@ -<script src="/__debug__/m/jquery.js" type="text/javascript" charset="utf-8"></script> -<script src="/__debug__/m/toolbar.js" type="text/javascript" charset="utf-8"></script> +<script src="{{ BASE_URL }}/__debug__/m/jquery.js" type="text/javascript" charset="utf-8"></script> +<script src="{{ BASE_URL }}/__debug__/m/toolbar.js" type="text/javascript" charset="utf-8"></script> <style type="text/css"> - @import url(/__debug__/m/toolbar.css); + @import url({{ BASE_URL }}/__debug__/m/toolbar.css); </style> <div id="djDebug"> <div id="djDebugToolbar"> diff --git a/debug_toolbar/templates/debug_toolbar/panels/templates.html b/debug_toolbar/templates/debug_toolbar/panels/templates.html index f9f03b5..ee93708 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/templates.html +++ b/debug_toolbar/templates/debug_toolbar/panels/templates.html @@ -12,8 +12,12 @@ {% if templates %} <dl> {% for template in templates %} - <dt><strong>{{ template.0|addslashes }}</strong></dt> - <dd><samp>{{ template.1|addslashes }}</samp></dd> + <dt><strong>{{ template.template.name|addslashes }}</strong></dt> + <dd><samp>{{ template.template.origin_name|addslashes }}</samp></dd> + <dd> + <div class="djTemplateShowContextDiv"><a class="djTemplateShowContext">Toggle Context</a></div> + <div class="djTemplateHideContextDiv" style="display:none;"><pre>{{ template.context }}</pre></div> + </dd> {% endfor %} </dl> {% else %} diff --git a/debug_toolbar/toolbar/loader.py b/debug_toolbar/toolbar/loader.py index 67dcc3e..935f45c 100644 --- a/debug_toolbar/toolbar/loader.py +++ b/debug_toolbar/toolbar/loader.py @@ -58,4 +58,7 @@ class DebugToolbar(object): """ Renders the overall Toolbar with panels inside. """ - return render_to_string('debug_toolbar/base.html', {'panels': self.panels}) + return render_to_string('debug_toolbar/base.html', { + 'panels': self.panels, + 'BASE_URL': self.request.META.get('SCRIPT_NAME', '') + }) |
