Django 错误: render_to_response()得到一个意外的关键字参数‘ context_instance’

升级到 Django 1.10之后,我得到了错误 render_to_response() got an unexpected keyword argument 'context_instance'

我的观点如下:

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))

下面是完整的回溯:

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'
36171 次浏览

render_to_response中的 context_instance参数是 已在姜戈1.8版本中弃用,在 Django 1.10中被删除。

解决方案是切换到 render快捷方式,该快捷方式自动使用 RequestContext

按如下方式更新导入和视图。请注意,renderrequest对象作为其第一个参数。

from django.shortcuts import render


def my_view(request):
context = {'foo': 'bar'}
return render(request, 'my_template.html', context)

render快捷方式是在 Django 1.3中引入的,因此此更改与 Django 的旧版本兼容。

在 Django 1.8是兼容的:

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))

在姜戈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)

Django 2.0.7 python 3.5

在 project/urls.py 中

handler404 = 'project.views.not_found'
handler500 = 'project.views.server_error'

在 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

异常 = 没有被传递,否则它将抛出 TypeError: server _ error ()缺少1个必需的位置参数: ‘ eption’