Django 1.7 render() 函数传递 request 对象导致 Value Error
升级到 Django 1.7之后发现打开任何页面都会出现 Value Error。
分析调用栈后发现,导致错误的原因是 render()
函数:
def index(request):
context = RequestContext(request, {})
return render(request, 'index.html', context) # 这一行第三个参数导致 Value Error
Django 1.7 中的 render()
函数会自动将RequestContext加入到上下文中,因此,没有必要不能再将 RequestContext 作为参数传入 render()
函数。
虽然上面代码中 render() 的写法来自于 Django 官方文档中的例子,但实际上,就算在1.6版本中这种写法也是没有必要的(第一个参数已经是 request,第三个参数 context 中又传入了一次 request),只是不会直接导致错误。
解决这个问题的方法有:
- 使用关键字参数
context_instance
:return render(request, 'index.html', context_instance=context)
- 传入一个字典,而不是 RequestConetxt 对象:
return render(request, 'index.html', {'mar_var': 'my_value'})
这一改变在文档中并没有做出任何说明,1.6 和 1.7 版本的文档中关于 render()
函数的部分完全一样。谁说 Django 的文档质量高来着?