5
5
import re
6
6
from functools import lru_cache
7
7
8
- import django
9
8
from django .conf import settings
10
9
from django .utils .module_loading import import_string
11
10
@@ -43,14 +42,9 @@ def __init__(self, get_response):
43
42
self .get_response = get_response
44
43
45
44
def __call__ (self , request ):
46
- # Decide whether the toolbar is active for this request. Don't render
47
- # the toolbar during AJAX requests.
45
+ # Decide whether the toolbar is active for this request.
48
46
show_toolbar = get_show_toolbar ()
49
- if not show_toolbar (request ) or (
50
- request .is_ajax ()
51
- if django .VERSION < (3 , 1 )
52
- else not request .accepts ("text/html" )
53
- ):
47
+ if not show_toolbar (request ) or request .path .startswith ("/__debug__/" ):
54
48
return self .get_response (request )
55
49
56
50
toolbar = DebugToolbar (request , self .get_response )
@@ -67,6 +61,14 @@ def __call__(self, request):
67
61
for panel in reversed (toolbar .enabled_panels ):
68
62
panel .disable_instrumentation ()
69
63
64
+ # Generate the stats for all requests when the toolbar is being shown,
65
+ # but not necessarily inserted.
66
+ for panel in reversed (toolbar .enabled_panels ):
67
+ panel .generate_stats (request , response )
68
+ panel .generate_server_timing (request , response )
69
+
70
+ response = self .generate_server_timing_header (response , toolbar .enabled_panels )
71
+
70
72
# Check for responses where the toolbar can't be inserted.
71
73
content_encoding = response .get ("Content-Encoding" , "" )
72
74
content_type = response .get ("Content-Type" , "" ).split (";" )[0 ]
@@ -75,8 +77,12 @@ def __call__(self, request):
75
77
getattr (response , "streaming" , False ),
76
78
"gzip" in content_encoding ,
77
79
content_type not in _HTML_TYPES ,
80
+ request .is_ajax (),
78
81
)
79
82
):
83
+ # If a AJAX or JSON request, render the toolbar for the history.
84
+ if request .is_ajax () or content_type == "application/json" :
85
+ toolbar .render_toolbar ()
80
86
return response
81
87
82
88
# Insert the toolbar in the response.
@@ -85,15 +91,6 @@ def __call__(self, request):
85
91
pattern = re .escape (insert_before )
86
92
bits = re .split (pattern , content , flags = re .IGNORECASE )
87
93
if len (bits ) > 1 :
88
- # When the toolbar will be inserted for sure, generate the stats.
89
- for panel in reversed (toolbar .enabled_panels ):
90
- panel .generate_stats (request , response )
91
- panel .generate_server_timing (request , response )
92
-
93
- response = self .generate_server_timing_header (
94
- response , toolbar .enabled_panels
95
- )
96
-
97
94
bits [- 2 ] += toolbar .render_toolbar ()
98
95
response .content = insert_before .join (bits )
99
96
if "Content-Length" in response :
0 commit comments