我正在尝试从这个中间件获取一些数据到我的模板。
class QueryCountDebugMiddleware(object):
def process_response(self, request, response):
if response.status_code == 200:
total_time = 0
for query in connection.queries:
query_time = query.get('time')
if query_time is None:
query_time = query.get('duration', 0) / 1000
total_time += float(query_time)
debug_text = '%s queries run, total %s seconds' % (len(connection.queries), total_time)
request.debug_text = debug_text
return response
我认为这应该可行,但是当我转到我的模板并放置{{request.debug_text}}时,没有任何内容。
答案 0 :(得分:1)
这甚至都没有意义。您希望测量在响应中执行查询所花费的时间。当然,您将它放在process_response
中间件方法中,该方法在处理响应后触发。但是,不知何故,您希望数据在您刚刚呈现的模板中可用?怎么可能有用?
即使你确实改变了这个以使用process_template_response
,因为布鲁斯建议(并且你还需要使用TemplateResponse而不是正常的响应)仍然无效,因为尽管你可以访问对于数据,它将是完全不准确的,因为它不会测量在模板呈现阶段本身中进行的任何查询。请记住,Django查询集是惰性的,并且在迭代之前不会实际执行,因此大多数数据库工作都倾向于在模板呈现过程中发生。
在任何情况下,如果您想查看查询数据,都应使用Django debug toolbar。
答案 1 :(得分:0)
我认为你想使用process_template_response(https://docs.djangoproject.com/en/1.6/topics/http/middleware/#process-template-response)而不是process_response。在模板已经处理之后调用后者,所以为时已晚。