Oto middleware, że używam:ContentNotRenderedError po Django uaktualnić
class StatsMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
# get number of db queries before we do anything
n = len(connection.queries)
# time the view
start = time.time()
response = view_func(request, *view_args, **view_kwargs)
totTime = time.time() - start
# compute the db time for the queries just run
queries = len(connection.queries) - n
if queries:
dbTime = reduce(add, [float(q['time'])
for q in connection.queries[n:]])
else:
dbTime = 0.0
# and backout python time
pyTime = totTime - dbTime
stats = {
'totTime': totTime,
'pyTime': pyTime,
'dbTime': dbTime,
'queries': queries,
'sql': '<br />'.join([ '<div class="stats_sql_query">%s</div><div class="stats_sql_time">%s s</div>' % (q['sql'], q['time']) for q in connection.queries[n:]]),
}
# clean query cache
db.reset_queries()
# replace the comment if found
if response and response.content:
s = response.content
regexp = re.compile(r'(?P<cmt><!--\s*STATS:(?P<fmt>.*?)-->)')
match = regexp.search(s)
if match:
s = s[:match.start('cmt')] + \
match.group('fmt') % stats + \
s[match.end('cmt'):]
response.content = s
return response
Został on doskonale pracuje dla mnie Django 1.3, ale ten złamał kiedy przeniesieni do django bagażnik (1.4+) Dzisiaj, z wyjątek: -
Traceback:
File "./../django-trunk/django/core/handlers/base.py" in get_response
105. response = middleware_method(request, callback, callback_args, callback_kwargs)
File "misc/middleware.py" in process_view
63. if response and response.content:
File "./../django-trunk/django/template/response.py" in _get_content
123. raise ContentNotRenderedError('The response content must be '
Exception Type: ContentNotRenderedError at/
Exception Value: The response content must be rendered before it can be accessed.
Byłbym wdzięczny, gdyby ktoś za pomocą pnia Django wskazał mi właściwy kierunek. Dzięki!
nie wiem. Ale przez wygląd komunikatu nowsza wersja nie pozwala już na dostęp do zawartości odpowiedzi w view_view, powinien być dostępny w innym widoku oprogramowania pośredniego. =/ –