Ответ 1
Кажется, Jinja2 работает по-другому:
Используйте <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
где в шаблонах Django вы используете {% csrf_token %}
источник: http://exyr.org/2010/Jinja-in-Django/
В шаблоне Django я использовал:
<form action="/user" method="post">{% csrf_token %}
{{ form.as_p|safe }}
<input type="submit" value="Submit" />
</form>
Но ошибка при изменении на jinja2 template engine
:
Encountered unknown tag 'csrf_token'
Мой вопрос: csrf_token protection
в jinja2
требуется?
При необходимости, как это сделать?
Спасибо заранее!
Кажется, Jinja2 работает по-другому:
Используйте <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
где в шаблонах Django вы используете {% csrf_token %}
источник: http://exyr.org/2010/Jinja-in-Django/
Я знаю, что это старый вопрос, но я хотел обновить его надлежащим образом, чтобы поддерживать csrf_token
при использовании нового django.template.backends.jinja2.Jinja2
, доступного в Django 1.8+. Используя базовый компонент шаблона django, вы бы назвали {% csrf_token %}
, но используя бэкэнд Jinja2, вы вызовете его с помощью {{ csrf_input }}
(вы можете получить только значение токена вместо ввода токена, используя {{ csrf_token }}
).
Подробности можно найти в django.template.backends.jinja2.Jinja2
источнике
Я использую Coffin. И имеют такую же проблему при использовании:
from coffin.shortcuts import render_to_response
return render_to_response('template_name_here.html', context)
попробуйте использовать вместо этого:
from coffin.shortcuts import render
return render(request, 'template_name_here.html', context)
в django 2.x с движком шаблонов jinja2 вы получаете значение токена с {{csrf_token}} и полный скрытый тег ввода с {{csrf_input}}
источник: https://django.readthedocs.io/en/2.1.x/ref/csrf.html
пример:
<form action="..." method="post">
{{ csrf_input }}
...
</form>
Полезный lib, включает определенные теги django: https://github.com/MoritzS/jinja2-django-tags
У меня была та же проблема, и я заметил, что процессор CSRF-контекста не входит в список загруженных по умолчанию процессоров. После добавления 'django.core.context_processors.csrf'
в TEMPLATE_CONTEXT_PROCESSORS
в setting.py
я мог бы обычно использовать тег шаблона {% csrf_token %}
.