2011-06-11 2 views
2

Я не следующий класс промежуточного слоя:Джанго метод промежуточного process_template_response не называют

class CommonContextMiddleware: 
    def process_template_response(self, request, response): 
     # Get the context and top videos 
     context = response.context_data 

     ... 

     # Add most_recent and most_viewed to the context... 
     context['most_recent'] = top_videos['most_recent'][:3] 
     context['most_viewed'] = top_videos['most_viewed'][:3] 

     # ...then continue rendering 
     return response 

Однако, независимо от того, что я положил в функции, она никогда не вызывается. Я предположил, что этот метод будет вызван для каждого генерируемого ответа шаблона, я ошибаюсь?

Заранее спасибо.

ответ

4

Я предполагаю, что когда вы говорите об «ответе шаблона», вы на самом деле возвращаете TemplateResponse из своего представления Django?

Это не лучшее место для такого рода вещей. Если вы просто хотите добавить переменные в каждый контекст шаблона, лучше всего сделать это в context processor.

+0

Я просто прочитал этот ответ, когда я вручную заменил каждый HttpResponse (t.render (c)) с помощью TemplateResponse (...). Я знал, что есть более простой способ. Благодаря! Кстати, в процессоре контекста, если две переменные имеют одно и то же имя (возвращается из процессора и один набор в контексте), какой из них побеждает? – Saul

+0

Странно, что render() с указанным шаблоном не возвращает TemplateResponse. Особенно странно, потому что встроенный 'django.contrib.auth.views.login' возвращает его. Поэтому мне нужно как промежуточное программное обеспечение, так и шаблонный обработчик контекста, чтобы убедиться, что переменные введены. Странный. Процессор контекста шаблона изолирует переменную шаблона dicts друг от друга, что является негибким (однако может быть более подверженным ошибкам). –

+1

@ danielRoseman: URL-адрес TempleResponse составляет 404 сейчас! – NoobEditor

Смежные вопросы