# file: settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'yourapp.middleware.SqlProfilingMiddleware',
    ...
)



# file: yourapp/midddlware.py

from django.db import connection
import time

class SqlProfilingMiddleware(object):
    Queries = []

    def process_request(self, request):
        return None
    def process_view(self, request, view_func, view_args, view_kwargs):
        return None
    def process_template_response(self, request, response):
        self._add_sql_queries(request)
        return response
    def process_response(self, request, response):
        self._add_sql_queries(request)
        return response
    def process_exception(self, request, exception):
        return None

    def _add_sql_queries(self, request):
        for q in connection.queries:
            q["time"] = time.time() + float(q["time"])
            SqlProfilingMiddleware.Queries.insert(0, q)
            # add request info as a separator
        SqlProfilingMiddleware.Queries.insert(0, {"time": time.time(), "path" : request.path})



# file: yourapp/views.py

from yourapp.middleware import SqlProfilingMiddleware

def profiling(request):
    return render_to_response("profiling.html", {"queries": SqlProfilingMiddleware.Queries})



# file: urls.py

urlpatterns = patterns('',
  (r'^profiling/$', 'yourapp.views.profiling'),
)



# file: yourapp/templates/profiling.html


        <div id="profiling">
            <h2>SQL queries</h2>
            <table cellpadding="0" cellspacing="0">
                <thead>
                    <tr>
                       <th>Time</th>
                       <th>SQL</th>
                    </tr>
                </thead>
                <tbody>
                {% for q in queries %}
                    {% if q.path %}
                    <tr class="path">
                        <td >{{ q.time }}</td>
                        <td>{{ q.path }}</td>
                    </tr>
                    {% else %}
                    <tr class="sql">
                        <td >{{ q.time }}</td>
                        <td>{{ q.sql }}</td>
                    </tr>
                    {% endif %}
                {% endfor %}
                </tbody>
            </table>
        </div>