关于1.10中django.shortcuts.render()方法签名的困惑

时间:2016-08-19 17:41:22

标签: python django dictionary

Django 1.10发行说明(https://docs.djangoproject.com/en/1.10/releases/1.10/#features-removed-in-1-10)说:

  • 删除以下函数的dictionary和context_instance参数:
    • django.shortcuts.render()
    • ...

但是,1.10(https://docs.djangoproject.com/en/1.10/topics/http/shortcuts/#render)中render()的文档仍将context列为dictionary类型的参数:

上下文

要添加到模板上下文的值的字典。默认情况下,这是一个空字典。如果字典中的值是可调用的,则视图将在呈现模板之前调用它。

坦率地说,我的问题是什么?通常这将是一个学术问题,但以下代码:

def index(request):
    context = RequestContext(request, {})
    return render(request, 'maintenance/maintenance.html', context) 

产生此错误:

TypeError: dict expected at most 1 arguments, got 3 

这是我能找到问题的最佳线索。我还应该提一下,在将Django从1.8升级到1.10之后出现了这个错误。

1 个答案:

答案 0 :(得分:4)

您混淆contextcontext_instance,这是两个独立的参数。在Django 1.10中删除了context_instance参数,但context仍然存在。

正如文档所说,context应该是值的字典。您收到错误是因为您传递的是RequestContext实例而不是字典。您可以通过将示例视图更改为:

来修复它
def index(request):
    context = {}
    return render(request, 'maintenance/maintenance.html', context)