Какая разница (в языке, который может понять нуб python / django) в представлении render()
, render_to_response()
и direct_to_template()
?
например, из примеров основных приложений Натана Боррора
def comment_edit(request, object_id, template_name='comments/edit.html'):
comment = get_object_or_404(Comment, pk=object_id, user=request.user)
# ...
return render(request, template_name, {
'form': form,
'comment': comment,
})
Но я также видел
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
И
return direct_to_template(request, template_name, my_data_dictionary)
Какая разница, что использовать в конкретной ситуации?
render()
доступно с 1.3.Перефразируя ответы Юрия, Фабио и Фроста для нуба Джанго (то есть меня) - почти наверняка упрощение, но хорошая отправная точка?
render_to_response()
это «оригинал», но требует, чтобы вы вставлялиcontext_instance=RequestContext(request)
почти все время PITA.direct_to_template()
предназначен для использования только в urls.py без представления, определенного в views.py, но его можно использовать в views.py, чтобы избежать необходимости вводить RequestContextrender()
это ярлык,render_to_response()
который автоматически поставляетcontext_instance=Request
.... Он доступен в версии для разработчиков django (1.2.1), но многие из них создали свои собственные ярлыки, такие как этот , этот или тот, который изначально меня бросил, Nathans basic.tools. shortcuts.pyисточник
Визуализация
Таким образом, между ними нет никакой разницы,
render_to_response
за исключением того, что он оборачивает ваш контекст, заставляя препроцессоры шаблона работать.Прямо к шаблону это общий вид .
Здесь нет никакого смысла использовать его, потому что
render_to_response
в виде функции просмотра накладных расходов .источник
Из документации Django :
direct_to_template
это что-то другое. Это общее представление, которое использует словарь данных для рендеринга html без использования views.py, вы используете его в urls.py. Документы здесьисточник
Просто одну записку я не смог найти в ответах выше. В этом коде:
Что на
context_instance
самом деле делает третий параметр ? Будучи RequestContext, он устанавливает некоторый базовый контекст, который затем добавляетсяuser_context
. Таким образом, шаблон получает этот расширенный контекст. Какие переменные добавляютсяTEMPLATE_CONTEXT_PROCESSORS
в файле settings.py. Например, django.contrib.auth.context_processors.auth добавляет переменнуюuser
и переменную,perm
которые затем доступны в шаблоне.источник