Токен Django CSRF не будет отображаться - PullRequest
12 голосов
/ 08 марта 2012

Вот соответствующий фрагмент HTML в шаблоне:

    <form action="/submit_text/" method="post">
    {% csrf_token %}
    {% include "backbone/form_errors.html" %}
    {{form.as_p}}
    <input type="submit" value="Submit" />
    </form>

Вот моя settings.py MIDDLEWARE_CLASSES декларация:

MIDDLEWARE_CLASSES = ( 
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

токен CSRF просто не отображается, вызывая

Запрещено (403) Ошибка проверки CSRF. Запрос отменен.

Ответы [ 2 ]

22 голосов
/ 08 марта 2012

Вам нужно передать RequestContext в вашем render_to_response для фактического запуска контекстных процессоров.

 from django.template import RequestContext

 context = {}
 return render_to_response('my_template.html',
                           context,
                           context_instance=RequestContext(request))

новый render ярлык (django 1.3+) сделает это за вас:

 from django.shortcuts import render

 context = {}
 return render(request, 'my_template.html', context)
5 голосов
/ 08 марта 2012

Пока есть проверенный ответ, я хочу отметить, что написание context_instance.... действительно раздражает. Я нахожу это полезным ... особенно с forms

context.update(csrf(request))
...