Как защитить csrf_token в шаблонном движке jinja2? - PullRequest
26 голосов
/ 21 октября 2011

В шаблоне 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 требуется?

Если требуется, как это сделать?

Заранее спасибо!

Ответы [ 5 ]

36 голосов
/ 21 октября 2011

Кажется, Jinja2 работает по-другому:

Используйте <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">, где в шаблонах Django вы используете {% csrf_token %}

источник: http://exyr.org/2010/Jinja-in-Django/

27 голосов
/ 26 сентября 2015

Я знаю, что это старый вопрос, но я хотел обновить его, добавив правильный способ поддержки csrf_token при использовании нового django.template.backends.jinja2.Jinja2, доступного в Django 1.8+. Используя бэкэнд шаблона django, вы бы назвали {% csrf_token %}, но, используя бэкэнд Jinja2, вы будете вызывать его с помощью {{ csrf_input }} (вы можете получить только значение токена вместо ввода токена с помощью {{ csrf_token }}).

Вы можете увидеть детали в django.template.backends.jinja2.Jinja2 источнике

0 голосов
/ 12 января 2019

в django 2.x с движком шаблонов jinja2 вы получаете значение токена с {{csrf_token}} и полный скрытый тег ввода с {{csrf_input}}

source: https://django.readthedocs.io/en/2.1.x/ref/csrf.html

пример:

<form action="..." method="post">
  {{ csrf_input }}

   ...
</form>
0 голосов
/ 20 июня 2014

Я использую Гроб . И есть такая же проблема при использовании:

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)
0 голосов
/ 18 декабря 2012

У меня была та же проблема, и я заметил, что процессор контекста CSRF отсутствует в списке загруженных по умолчанию процессоров. После добавления 'django.core.context_processors.csrf' к TEMPLATE_CONTEXT_PROCESSORS в setting.py я мог бы нормально использовать тег шаблона {% csrf_token %}.

...