我遵循教程并使用此行获取TypeError:
c.update(csrf(request))
这是完整视图
from django.shortcuts import render
from django.views.decorators import csrf
def index(request):
c = {} #dictionary called c
c.update(csrf(request))
return render(request, 'login/index.html', c)
我是否在做旧版本的更改?我是否错误地导入了csrf?我正在运行最新版本的Django。
答案 0 :(得分:3)
TypeError是因为您导入了csrf装饰器而不是上下文处理器。应该是。
from django.core.context_processors import csrf
但是,在使用render
快捷方式时,您不需要手动包含csrf令牌。它会自动使用包含csrf标记的请求上下文呈现模板。
def index(request):
c = {} # dictionary called c
return render(request, 'login/index.html', c)
Django 1.3中引入了render
快捷方式,因此多年来无需在视图中调用csrf(request)
(即使在Django 1.3之前,它可能更容易使用render_to_response
与RequestContext
)。不幸的是,this example仍然存在于Django 1.8的文档中,所以它比它应该更常见。