【发布时间】:2014-06-26 08:55:06
【问题描述】:
我正在使用 Django 调试工具栏来调试和优化我的网站。我还使用一些自定义中间件来做一些事情,例如检查用户是否已登录并被允许访问他们试图查看的 url、查询广告等。
在此中间件中,有时会执行 SQL 查询,但查询不会显示在 DDT 的“查询”面板下。有没有办法让 DDT 识别和跟踪中间件?
【问题讨论】:
标签: django django-debug-toolbar
我正在使用 Django 调试工具栏来调试和优化我的网站。我还使用一些自定义中间件来做一些事情,例如检查用户是否已登录并被允许访问他们试图查看的 url、查询广告等。
在此中间件中,有时会执行 SQL 查询,但查询不会显示在 DDT 的“查询”面板下。有没有办法让 DDT 识别和跟踪中间件?
【问题讨论】:
标签: django django-debug-toolbar
MIDDLEWARE_CLASSES 的顺序很重要。你应该包括 尽早在列表中调试 Toolbar 中间件。然而,它 必须在任何其他编码响应的中间件之后 内容,例如 GZipMiddleware。
解决方案是将debug_toolbar.middleware.DebugToolbarMiddleware 放在MIDDLEWARE_CLASSES 中的自定义中间件之前。
【讨论】:
我发现错误的地方之一是我为与启用 debug_toolbar 相关的所有设置添加了一个单独的文件 debugtoolbar.py。我刚刚在我的 settings_local.py 中导入了它,但它以某种方式调用了两次并且没有显示查询。
我一加条件语句就加
import os
import sys
from my_project.settings import INSTALLED_APPS, MIDDLEWARE_CLASSES
DEBUG_TOOLBAR_APPS_NAME = 'debug_toolbar'
if DEBUG_TOOLBAR_APPS_NAME not in INSTALLED_APPS:
INSTALLED_APPS += ( DEBUG_TOOLBAR_APPS_NAME, )
DEBUG_TOOLBAR_MIDDLEWARE = 'debug_toolbar.middleware.DebugToolbarMiddleware'
if DEBUG_TOOLBAR_MIDDLEWARE not in MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = ( DEBUG_TOOLBAR_MIDDLEWARE, ) + MIDDLEWARE_CLASSES
def custom_show_toolbar(request):
return True
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': 'my_project.settings.custom_show_toolbar',
}
一切正常。希望这会节省一些人的时间。
【讨论】:
DEBUG_TOOLBAR_CONFIG = { 'SHOW_TOOLBAR_CALLBACK': lambda x: True, }