我正在尝试实现这个Jinjanl2br
过滤器。它工作正常,只是<br>
它添加的 ' 被转义了。这对我来说很奇怪,因为<p>
's 没有被转义,它们都在同一个字符串中。
我正在使用烧瓶,因此autoescape
启用了 Jinja。当我发现这个人说 the autoescape
and theescape(value)
可能导致双重转义时,我真的充满希望,但删除 theescape()
并没有帮助。
这是我修改后的代码,它的输出:
@app.template_filter()
@evalcontextfilter
def nl2br(eval_ctx, value):
_paragraph_re = re.compile(r'(?:\r\n|\r(?!\n)|\n){2,}')
result = u'\n\n'.join(u'<p>%s</p>' % escape(p.replace(u'\r\n', u'<br>\n')) for p in _paragraph_re.split(value))
if eval_ctx.autoescape:
result = Markup(result)
return result
输入:
u'1\r\n2\r\n\r\n3\r\n4\r\n\r\n5\r\n6\r\n7'
输出:
<p>1<br>
2</p>
<p>3<br>
4</p>
<p>5<br>
6<br>
7</p>
所需的输出:
<p>1<br>2</p>
<p>3<br>4</p>
<p>5<br>6<br>7</p>
什么可能导致<br>
' 被转义但允许<p>
' ?