Найти - Пользователи
Полная версия: Свой Middleware
Начало » Django » Свой Middleware
1
alexander0505
Добрый день, прошу сильно не пинать, новичок в Django

Нужно перед рендером централизовано парсить данные, ну для начала хотя бы добавить слово в конец контента.
нашел похожую тему
http://python.su/forum/topic/11368/?page=1#post-71591

сделал так
class PublicationLink(object):
    def process_response(self, request, response):
     content = response.content
     content.replace('</body>', 'CoolMiddlweare </body>')
     response.content = content

но дебажа, наблюдаю что response.content не содержит весь контент ккак ожидалось, там толкьо начало документа, объявление скриптов и все
Контент заполняется уже после этого метода
Заранее спасибо!
buddha
Вообще топик надо создавать в разделе - Django. Я думаю перенесут модераторы.

По теме, писал как твой свой подобный промежуточный слой, столкнулся с таким нюансом, что обычные объекты ответа - HttpResponse, которые возвращают методы типа render, render_to_response нет возможности редактировать. Вместо этого в представлениях(viewes) необходимо возвращать объекты - SimpleTemplateResponse\TemplateResponse, заточенные специально под это дело(не понимаю, почему ими не заменят обычные HttpResponse), а в промежуточном слое использовать метод process-template-response.

alexander0505
Тогда спрошу так:
был написан плагин для редактора ckeditor - а который позволяет указывать ссылку на существующий материал сайта. Он вставляет псевдоссылки , которые преобразуются в реальные с помощью специального метода перед рендером

Можно ли как то сделать это централизовано? сейчас это работает только там где я явно вызываю такой метод
buddha
Содержимое HttpResponse не получится отредактировать в middleware, содержимое SimpleTemplateResponse\TemplateResponse получится(это всего лишь классы-наследники).

Исходя из этого, если необходимо сделать это для всех представлений(централизовано), то необходимо заменить возвращаемые объекты этих представлений с HttpResponse(render(), render_to_response() ) на SimpleTemplateResponse\TemplateResponse и в методе process-template-response вставить ваш метод преобразования ссылки. Я бы так сделал.

Если нет возможности\желания менять возвращаемый объект всех представлений, запилите декоратор =) и навесьте его на необходимые представления)

Надеюсь понятно расписал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB