转义字符串然后在 jinja 中添加 html 标签

Escaping string and then adding html tags in jinja

我有一个要转义的字符串,然后只添加特定的 html 标签,然后再在 jinja 中打印它。这就是我想要做的:

{{ user.info | e | nl2br | safe  }}

所以基本上我想将新行转换为 <br/> 但转义用户提供的每个 html 标记。这似乎不起作用,<br/> 标签也被转义了。我怎样才能在 Jinja 中实现这种行为?

好吧,我找到了一个解决方案,似乎转义实际上是 returns 一个标记对象,所以调用 safe 对它没有帮助。我必须定义一个自定义过滤器:

@app.template_filter('escape_custom')
def escape_custom(string):
    string = str(jinja2.escape(string))
    return jinja2.Markup(string.replace('\n', '<br/>\n'))