2017-01-11 19 views
0

Я следую учебник и получить TypeError с этой линии:Что такое новая версия CSRF в Django 1,10

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

Какая полная ошибка вы получаете? – Sayse

ответ

3

ТипError - это то, что вы импортировали декодер csrf вместо контекстного процессора. Должен быть.

from django.core.context_processors import csrf 

Однако, вам не нужно вручную включить маркер CSRF при использовании render ярлыка. Он автоматически отображает шаблон с контекстом запроса, который включает токен csrf.

def index(request): 
    c = {} # dictionary called c 
    return render(request, 'login/index.html', c) 

render ярлык был введен в Django 1.3, так что не было необходимости вызывать csrf(request) в представлении в течение многих лет (еще до того, Django 1.3 это было, наверное, проще использовать render_to_response с RequestContext). К сожалению, this example остался в документах до Django 1.8, поэтому он намного более распространен, чем должен быть.