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?

Original source