如何在jinja2模板引擎中保护csrf_token?

ngu*_*yên 26 django csrf jinja2

在Django模板中,我使用了:

<form action="/user" method="post">{% csrf_token %}
    {{ form.as_p|safe }}
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

但是当我改为jinja2 template engine:

 Encountered unknown tag 'csrf_token'
Run Code Online (Sandbox Code Playgroud)

我的问题:csrf_token protectionjinja2需要?

如果需要,怎么做?

提前致谢!

Gui*_*sco 37

似乎Jinja2的工作方式不同:

使用<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> 其中Django模板使用{% csrf_token %}

来源:http://exyr.org/2010/Jinja-in-Django/


lso*_*wen 28

我知道这是一个老问题,但是我想用正确的方法更新它,以便csrf_token在使用django.template.backends.jinja2.Jinja2Django 1.8+中的新功能时提供支持.使用django模板后端你会调用{% csrf_token %},但是使用Jinja2后端你将使用它来调用它{{ csrf_input }}(你可以使用令牌值而不是令牌输入{{ csrf_token }}).

您可以在源中查看详细信息django.template.backends.jinja2.Jinja2

  • 当使用宏来渲染表单时,要传递`csrf_input`,你需要使用上下文导入它们,例如`{%from"bootstrap/forms/horizo​​ntal.html"import render_form with context%}`.有关详细信息,请参阅[Jinja2导入可见性](http://jinja.pocoo.org/docs/dev/templates/#import-visibility). (2认同)