如何在AJAX调用中使用django-debug-toolbar?

65 投票
4 回答
17167 浏览
提问于 2025-04-16 12:34

我很好奇有没有什么好的方法可以让(非常棒的)django-debug-toolbar和AJAX查询一起使用。

举个例子,我用jQuery的$.get方法,带着一堆参数去请求一个Django的URL,然后把结果加载到页面里。如果这个请求出错了,错误信息不会在工具栏上显示。我也不能通过复制AJAX的URL来使用这个工具,因为DDT是附加在响应的body标签上的,而在AJAX响应中包含body标签是没有意义的。

任何建议都会很有帮助!谢谢!

4 个回答

7

我最近遇到了这个问题。我的快速解决办法就是添加一些HTML视图,来灵活使用相同的代码。

举个例子,如果我在NewRelic上看到我网站90%的时间都花在了一个ajax请求上,地址是/search_for_book?title=,那么我的代码可能看起来是这样的:

views.py:

def search_for_book(request, title):
    data = _search_for_book(title)
    return json_response(data)

def test_search_for_book(request, title):
    data = _search_for_book(title)
    return http_response(data)

瓶颈可能出现在_search_for_book这段代码里;我们是否通过ajax调用它,对诊断它的效率问题并没有影响(至少对我来说是这样,你的情况可能不同)。

35

更新:这个功能现在已经内置在django-debug-toolbar中了

这个功能是在这个PR中添加的,并在3.0版本中发布。


旧的答案对于旧版本的工具栏可能仍然有用:

我写了一个Django Debug Toolbar请求历史面板,可以添加到Django Debug Toolbar中,以查看当前请求以外的请求(包括AJAX请求)。

通过pip安装:

pip install django-debug-toolbar-request-history

settings.py中,将'ddt_request_history.panels.request_history.RequestHistoryPanel'添加到DEBUG_TOOLBAR_PANELS中,例如:

DEBUG_TOOLBAR_PANELS = [
    'ddt_request_history.panels.request_history.RequestHistoryPanel',  # Here it is 
    'debug_toolbar.panels.versions.VersionsPanel',
    'debug_toolbar.panels.timer.TimerPanel',
    'debug_toolbar.panels.settings.SettingsPanel',
    'debug_toolbar.panels.headers.HeadersPanel',
    'debug_toolbar.panels.request.RequestPanel',
    'debug_toolbar.panels.sql.SQLPanel',
    'debug_toolbar.panels.templates.TemplatesPanel',
    'debug_toolbar.panels.staticfiles.StaticFilesPanel',
    'debug_toolbar.panels.cache.CachePanel',
    'debug_toolbar.panels.signals.SignalsPanel',
    'debug_toolbar.panels.logging.LoggingPanel',
    'debug_toolbar.panels.redirects.RedirectsPanel',
    'debug_toolbar.panels.profiling.ProfilingPanel',
]
34

我之前也遇到过同样的问题!

随着我做的AJAX应用越来越多,我发布了一个Django应用和一个Chrome扩展,这两个东西正好解决了这个问题。

所有的信息都在GitHub的仓库里。

撰写回答