升级到 Django 1.11 后 csrftoken 标签不工作

csrftoken tag not working after upgrade to Django 1.11

我继承了我最初在 Django 1.9 上工作的 Django 应用程序。最近我将它迁移到 Django 1.11 和 Python 3.4(从 2.7)。从那时起,我的一些管理员视图开始出现 403 Forbidden 错误,CSRF 验证失败。我查看了 the documentation,并检查了以下内容:

  1. 我仍在使用 MIDDLEWARE_CLASSES,但 django.middleware.csrf.CsrfViewMiddleware 包含在我的配置中(它是第二个,在 SessionMiddlewareCommonMiddleware 之后)。
  2. 使用的模板包含 {% csrf_token %} 内容。
  3. 视图使用 render_to_response(),并将 RequestContext(request) 作为第三个参数传递给它。

(据我所知,None 在 Django/Python 升级期间或之后发生了变化。)

虽然我有相当多的 Python Web 编程经验,但我对 Django 的经验并不丰富。我是什么 missing/how 我可以进一步调试吗?

context_instance 参数改为 deprecated in 1.8 and was subsequently removed in 1.10. If you need the request in the context, use render() 并将请求作为第一个参数传递。您应该在第三个参数中将上下文作为普通字典传递。