Django - what is the difference between render(), render_to_response() and direct_to_template()?
django, python
Solution
https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render
render(request, template[, dictionary][, context_instance][, content_type][, status][, current_app])
`render()` is a brand spanking new shortcut for `render_to_response` in 1.3 that will automatically use `RequestContext` that I will most definitely be using from now on.
2020 EDIT: It should be noted that `render_to_response()` was removed in Django 3.0
https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render-to-response
render_to_response(template[, dictionary][, context_instance][, mimetype])¶
`render_to_response` is your standard render function used in the tutorials and such. To use `RequestContext` you'd have to specify `context_instance=RequestContext(request)`
https://docs.djangoproject.com/en/1.8/ref/generic-views/#django-views-generic-simple-direct-to-template
`direct_to_template` is a generic view that I use in my views (as opposed to in my urls) because like the new `render()` function, it automatically uses `RequestContext` and all its `context_processor`s.
But `direct_to_template` should be avoided as function based generic views are deprecated. Either use `render` or an actual class, see https://docs.djangoproject.com/en/1.3/topics/generic-views-migration/
I'm happy I haven't typed `RequestContext` in a long, long time.
Problem
Whats the difference (in language a python/django noob can understand) in a view between `render()`, `render_to_response()` and `direct_to_template()`? e.g. from Nathan Borror's basic apps examples ``` 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, }) ``` But I've also seen ``` return render_to_response(template_name, my_data_dictionary, context_instance=RequestContext(request)) ``` And ``` return direct_to_template(request, template_name, my_data_dictionary) ``` Whats the difference, what to use in any particular situation?