django - csrfmiddlewaretoken - ¿Cómo proteger csrf_token en el motor de plantillas jinja2?
get csrf token django (4)
Parece que Jinja2 funciona de manera diferente:
Use <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> donde en las plantillas de Django usa {% csrf_token %}
En la plantilla de Django utilicé:
<form action="/user" method="post">{% csrf_token %}
{{ form.as_p|safe }}
<input type="submit" value="Submit" />
</form>
Pero error cuando cambio al jinja2 template engine :
Encountered unknown tag ''csrf_token''
Mi pregunta: ¿Se csrf_token protection jinja2 en jinja2 ?
Si es necesario, ¿cómo hacer esto?
¡Gracias por adelantado!
Sé que esta es una pregunta antigua, pero quería actualizarla con la forma adecuada de admitir csrf_token cuando csrf_token el nuevo django.template.backends.jinja2.Jinja2 disponible en Django 1.8+. Usando el backend de la plantilla de django, habría llamado {% csrf_token %} , pero al usar el backend de Jinja2, lo llamará usando {{ csrf_input }} (puede obtener el valor del token en lugar de la entrada del token usando {{ csrf_token }} ) .
Puede ver los detalles en la source django.template.backends.jinja2.Jinja2
Tuve el mismo problema, y lo que noté es que el procesador de contexto CSRF no está en la lista de los procesadores cargados por defecto. Después de agregar ''django.core.context_processors.csrf'' a TEMPLATE_CONTEXT_PROCESSORS en setting.py , podría usar la etiqueta de plantilla {% csrf_token %} normalmente.
Yo uso el Coffin . Y tiene el mismo problema cuando se usa:
from coffin.shortcuts import render_to_response
return render_to_response(''template_name_here.html'', context)
intenta usar en su lugar:
from coffin.shortcuts import render
return render(request, ''template_name_here.html'', context)