如何在Flask中使用Jinja2模板解码'

9

当我试图在Jinja2模板中写入来自wtforms的错误时,它会返回未解码的引号。我该如何修复它?

{% if registrationForm.errors %}
    <script>swal("Error!", "{{ registrationForm.errors['password'] }}", "error")</script>
{% endif %}

错误等同于

{'email': ['This field is required.'], 'username': ['This field is required.'], 'acceptTOS': ['This field is required.'], 'csrf_token': ['CSRF token missing'], 'password': ['This field is required.']}
1个回答

10
使用safe模板过滤器 - 它告诉jinja2不要应用任何进一步的过滤器。
将字符串标记为可以安全地包含在HTML/XML输出中,无需进行转义。
用法示例:
{{ errors|safe }}

或者,

{{ errors | tojson | safe }}

或者在 Flask 中使用 Markup 将其标记为安全。


2
运行良好,但是“tojson | safe”会抛出“Uncaught SyntaxError: missing ) after argument list”的错误。 - Honza Sedloň
1
我只是建议使用 {{ errors | safe }} 就足够了 - 在早期版本的 Flask 中,使用 {{ errors | tojson | safe }} 来处理。 - Nabeel Ahmed
1
最终,我通过这个 <script>swal("Error!", "{% for error in registrationForm.errors.keys() %}[{{ error }}] {{ registrationForm.errors[error][0] }}\n{% endfor %}", "error")</script> 解决了更多的问题。 - Honza Sedloň
{{ errors | tojson | safe }} 或 {{ errors | tojson }} 对我来说都可以使用,但是 {{ errors|safe }} 不行。 - Vinay Potluri
我尝试使用{{ errors | tojson | safe }},但在Chrome开发工具中没有反映,我只能看到{{ errors | tojson }},你能告诉我为什么吗? - Sumathi J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接