将process_response中间件中的数据导入模板

时间:2014-08-08 17:32:06

标签: python django

我正在尝试从这个中间件获取一些数据到我的模板。

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}}时,没有任何内容。

2 个答案:

答案 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。在模板已经处理之后调用后者,所以为时已晚。