首页 > 解决方案 > 我可以在测试期间忽略 Jinja2 的“UndefinedError”吗?

问题描述

我正在使用 Flask 和 Flask-WTF。我决定在测试中禁用 CSRF 保护,因为用它进行测试有点尴尬,而且我不想测试 Flask/Flask-WTF。然而,这又带来了另一个问题:

jinja2.exceptions.UndefinedError: 'trip_planner.auth.forms.LoginForm object' has no attribute 'csrf_token'

违规模板如下:

{% extends "base.html" %}

{% block main %}
    <form method="POST">
        {{ form.csrf_token }}
        <div>
            {{ form.username.label }}{{ form.username }}
        </div>
        <div>
            {{ form.password.label }}{{ form.password }}
        </div>
        <div>
            <button type="submit">Login</button>
        </div>
    </form>
{% endblock %}

我的理解如下:如果完全禁用 CSRF,WTForms 不会费心将 CSRF 令牌字段注入到表单中。

我可以让 Jinja 忽略这个错误或避免这个问题吗?

标签: pythonflaskjinja2flask-wtforms

解决方案


经过更多阅读,我相信我找到了解决方案。

如果 CSRF 字段存在,替换form.csrf_tokenform.hidden_tag将呈现 CSRF 字段,而不依赖于字段名称。


推荐阅读