понедельник, 12 марта 2012 г.

Отличия и приимущества RequestContext от Context в Django

Лучше всего познается на практике. Создаю небольшой сайт используя Django. Получаю запрос, обрабатываю его, вывожу результаты используя шаблонизатор. Да хорошо, что можно всё отделить, но при большом количестве однотипных действий желаешь упрощения. Начал использовать render_to_response с библиотеки django.shortcuts. На первый взгляд я получил, что хотел. В данную функцию передаю шаблон и переменные,
получаю готовый ответ со всеми заголовками http протокола. Встал вопроса общих переменных для шаблонов. За формирование переменных шаблонов отвечает Context. Самое главное в Web приложениях(имеющие однопроходный алгоритм REST) - это запрос - request(запрос - получаем), response (ответ - отдаем). RequestContext - это контекст унаследованый от Context, работает с request(запросом), дополнительно переменные шаблонов формируются
приложениями указанными в переменной TEMPLATE_CONTEXT_PROCESSORS файла настроек. Для взаимодействия всего фреймворка необходимо использовать RequestContext. Создадим декоратор, почувствуем мощь python.
def render_to(template_name):
    def renderer(func):
        def wrapper(request, *args, **kw):
            output = func(request, *args, **kw)
            if not isinstance(output, dict):
                return output
            return render_to_response(request, template_name, output)
        return wrapper
    return renderer

@render_to('my_template.html')
def my_view(request):
    # View code here...
    return some_dict

Комментариев нет:

Отправить комментарий