Reputation: 308769
After upgrading to Django 1.10, I get the error render_to_response() got an unexpected keyword argument 'context_instance'
.
My view is as follows:
from django.shortcuts import render_to_response
from django.template import RequestContext
def my_view(request):
context = {'foo': 'bar'}
return render_to_response('my_template.html', context, context_instance=RequestContext(request))
Here is the full traceback:
Traceback:
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/alasdair/dev/rtr/rtr/urls.py" in my_view
26. return render_to_response('my_template.html', context, context_instance=RequestContext(request))
Exception Type: TypeError at /
Exception Value: render_to_response() got an unexpected keyword argument 'context_instance'
Upvotes: 73
Views: 37322
Reputation: 364
Django 2.0.7 python 3.5
in project/urls.py
handler404 = 'project.views.not_found'
handler500 = 'project.views.server_error'
in project/views.py
def not_found(request, exception=None):
response = render(request, '404.html', {})
response.status_code = 404
return response
def server_error(request, exception=None):
response = render(request, '500.html', {})
response.status_code = 500
return response
exception=None is passed because otherwise it throws TypeError: server_error() missing 1 required positional argument: 'exception'
Upvotes: 0
Reputation: 126
in Django 1.8 is compatible:
from django.shortcuts import render_to_response
from django.template import RequestContext
def my_view(request):
context = {'foo': 'bar'}
return render_to_response('my_template.html', {'context':context}, context_instance=RequestContext(request))
in Django 1.11
from django.shortcuts import render
from django.template import RequestContext
def my_view(request):
context = {'foo': 'bar'}
return render(request, 'my_template.html', context)
Upvotes: 2
Reputation: 308769
The context_instance
parameter in render_to_response
was deprecated in Django 1.8, and removed in Django 1.10.
The solution is to switch to the render
shortcut, which automatically uses a RequestContext
.
Update your imports and view as follows. Note that render
takes the request
object as its first argument.
from django.shortcuts import render
def my_view(request):
context = {'foo': 'bar'}
return render(request, 'my_template.html', context)
The render
shortcut was introduced in Django 1.3, so this change is compatible with older versions of Django.
Upvotes: 142