2012-03-07 30 views
12

He aquí el fragmento correspondiente de HTML en la plantilla:testigo Django CSRF no mostrará

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

Aquí está mi settings.pyMIDDLEWARE_CLASSES declaración:

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', 
) 

El CSRF token de simplemente no muestra, causando un

Prohibido (403) Ha fallado la verificación de CSRF. Solicitud abortada

Respuesta

21

lo necesario para aprobar el RequestContext en su render_to_response para los procesadores de contexto que se ejecuten realmente.

from django.template import RequestContext 

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

la nueva render acceso directo (Django 1.3+) lo hará por usted:

from django.shortcuts import render 

context = {} 
return render(request, 'my_template.html', context) 
+0

¡Gracias, eso funciona! – babonk

+1

¡Muy útil! Tenía una etiqueta de plantilla personalizada, así que tuve que especificar '@ register.simple_tag (takes_context = True)' y luego 'return render_to_string ('template.html', {}, context_instance = context)'. – osa

5

Si bien no existe una respuesta marcada, quiero señalar que la escritura context_instance.... pone muy molesto. Encuentro esto útil ... especialmente con forms

context.update(csrf(request)) 
+0

gracias por la propina – babonk