Flask unit test throwing Error: has no attribute 'csrf_token' in Jinja2 template

Flask unit test throwing Error: has no attribute 'csrf_token' in Jinja2 template

在我的单元测试中,我已经使用

禁用了 CSRF
WTF_CSRF_ENABLED = False

失败的示例测试用例

def test_get_tags(self):
    tag_name = 'tag_1'
    r = self.client.get(url_for('tag.tags'))
    self.assertIn(tag_name, r.get_data(as_text=True))

但是在我的模板中我调用了 csrf 令牌。

{% for form in tag_forms%}
    {{form.csrf_token}}
    {{form.tag_name}}
    {{form.update}}
    {{form.delete}}
{% endfor %}

这会导致以下错误

jinja2.exceptions.UndefinedError: 'app.tag.forms.UpdateTagForm object' has no attribute 'csrf_token'

我猜这个错误是因为我禁用了 CSRF 令牌。如何解决?

在您的 jinja 模板中,首先检查是否设置了该值,然后检查是否包含它。

{% if 'csrf_token' in form %}
  {{form.csrf_token}}
{% endif %}