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)