Skip to content

Instantly share code, notes, and snippets.

@fabiosussetto
Last active December 2, 2023 01:11
Show Gist options
  • Save fabiosussetto/c534d84cbbf7ab60b025 to your computer and use it in GitHub Desktop.
Save fabiosussetto/c534d84cbbf7ab60b025 to your computer and use it in GitHub Desktop.
Enable Django toolbar for JSON responses
class NonHtmlDebugToolbarMiddleware(object):
"""
The Django Debug Toolbar usually only works for views that return HTML.
This middleware wraps any JSON response in HTML if the request
has a 'debug' query parameter (e.g. http://localhost/foo?debug)
"""
@staticmethod
def process_response(request, response):
if request.GET.get('debug'):
if response['Content-Type'] == 'application/json':
content = json.dumps(json.loads(response.content), sort_keys=True, indent=2)
response = HttpResponse(u'<html><body><pre>{}</pre></body></html>'.format(content))
return response
@arbuckle
Copy link

Here's an updated version that works with Django 4.2.

import json
from django.http import HttpResponse

class NonHtmlDebugToolbarMiddleware(object):
    """
    The Django Debug Toolbar usually only works for views that return HTML.
    This middleware wraps any JSON response in HTML if the request
    has a 'debug' query parameter (e.g. http://localhost/foo?debug)

    adapted from:
    https://gist.github.com/fabiosussetto/c534d84cbbf7ab60b025
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        if request.GET.get('debug', None) is not None:
            if response['Content-Type'] == 'application/json':
                content = json.dumps(json.loads(response.content), sort_keys=True, indent=2)
                response = HttpResponse(u'<html><body><pre>{}</pre></body></html>'.format(content))

        return response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment