django - csrf token missing or incorrect.
Django-{% csrf_token%} se usó en una plantilla, pero el contexto no proporcionó el valor (1)
Su index.html
se representa sin RequestContext
. Prueba esto:
def index(request):
return render_to_response(''index.html'', context_instance=RequestContext(request))
También te recomiendo que uses un acceso directo más conveniente:
from django.shortcuts import render
def index(request):
return render(''index.html'')
De documentos:
render () es lo mismo que una llamada a render_to_response () con un argumento context_instance que fuerza el uso de un RequestContext.
EDITAR :
Gracias @nerdwaller por mencionar, las versiones más nuevas ahora necesitan:
render(request, ''index.html'', {params});
Soy nuevo en Django y todavía estoy tratando de entender sus características. He creado un proyecto muy simple con Django 1.4.2 que tiene una página de índice con forma simple donde ingresas algo y una página de resultados donde se muestra tu entrada después del envío (el código está debajo).
Después del envío, recibo el error 403 y el siguiente mensaje:
Se utilizó {% csrf_token%} en una plantilla, pero el contexto no proporcionó el valor. Esto generalmente es causado por no usar RequestContext. warnings.warn ("A {% csrf_token%} se usó en una plantilla, pero el contexto no proporcionó el valor. Esto generalmente se produce al no usar RequestContext").
index.html
<!DOCTYPE html>
<head>
<title>Index page</title>
</head>
<body>
<div id="header">Welcome to index page</div>
<div id="content">
<p>Enter your name</p>
<form action="/result/" method="post" accept-charset="utf-8">{% csrf_token %}
<input type="text" name="answer">
<input type="submit" value="Send!">
</form>
</div>
</body>
result.html
<!DOCTYPE html>
<head>
<title>Result page</title>
</head>
<body>
<div id="header">Here is the result</div>
<div id="content">
<p>Your name is: {{ answer }}</p>
</div>
</body>
views.py
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
def index(request):
return render_to_response(''index.html'')
def result(request):
p = request.POST[''answer'']
return render_to_response(''result.html'', {''answer'': p}, context_instance=RequestContext(request))
He investigado la documentación y varios ejemplos en Internet, pero no entiendo qué estoy haciendo mal. Si deshabilito django.middleware.csrf.CsrfViewMiddleware en settings.py , obtengo exactamente lo que quiero, pero esa no es la respuesta que estoy buscando.
Agradezco la ayuda de los ninjas de Django más experimentados :-)