рассмотрим это:
return render(request, 'index.html', {..context..})
return render_to_response('index.html', {..context..})
С одной стороны, render
чище и более питонично. С другой стороны, вы используете request
как свой первый аргумент, который я считаю излишним и запутанным. Поэтому я начал задаваться вопросом о больших различиях...
Согласно документы:
render() совпадает с вызовом render_to_response() с context_instance, который заставляет использовать RequestContext.
Таким образом, разница заключается только в использовании RequestContext. Итак, что важно для RequestContext? Давайте посмотрим на docs снова:
специальный класс Context [...] действует несколько иначе, чем нормальный django.template.Context. Первое отличие состоит в том, что требуется HttpRequest в качестве первого аргумента.
Ok. Это почти не имеет значения
Второе отличие состоит в том, что он автоматически заполняет контекст с несколькими переменными, согласно вашим TEMPLATE_CONTEXT_PROCESSORS настройка [...] В дополнение к этим, RequestContext всегда использует django.core.context_processors.csrf [...] намеренно жестко закодирован и не может быть отключен TEMPLATE_CONTEXT_PROCESSORS установка.
Итак, это важная часть - убедитесь, что все обработчики контекста работают правильно, с акцентом на csrf. Так что, вернемся к первому примеру, это на самом деле то же самое:
return render(request, 'index.html', {...})
return render_to_response('index.html', {...}, context_instance=RequestContext(request))
Теперь, второй пример, очевидно, намного хуже, все это выглядит очень усложненным. Поэтому мой большой вопрос: Зачем использовать render_to_response
вообще? Почему бы не обесценить его?
Другие вопросы, которые приходят на ум:
- Нет ли лучшего способа принудительного использования
RequestContext
по умолчанию? - Есть ли способ избежать передачи
request
в качестве аргумента? Это ужасно избыточно. Я нашел сообщение в блоге, в котором показано, как сделать render_to_response в простой в использовании декоратор. Не можем ли мы сделать что-то подобное сrender
? - Есть ли какие-либо мысли об этой проблеме (если это вообще проблема)? Я ничего не вижу в будущей шкале устаревания. Я считаю это особенно запутанным, учитывая, что
render
появился с django 1.3 специально для решения проблем с render_to_response и что все соглашается вы не должны использоватьrender_to_response
Я знаю, что это немного не по теме, но я надеюсь получить ответы, которые объяснят, почему render_to_response
останавливается и\или примеры использования, где использование render_to_response
будет предпочтительнее render
(если они есть)