aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar
diff options
context:
space:
mode:
Diffstat (limited to 'debug_toolbar')
-rw-r--r--debug_toolbar/media/toolbar.js63
-rw-r--r--debug_toolbar/panels/template.py28
-rw-r--r--debug_toolbar/templates/debug_toolbar/base.html6
-rw-r--r--debug_toolbar/templates/debug_toolbar/panels/templates.html8
-rw-r--r--debug_toolbar/toolbar/loader.py5
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', '')
+ })