【发布时间】:2012-09-20 21:22:49
【问题描述】:
我正在使用 Jinja 和 Flask(启用自动转义),我正在尝试应用 this filter
import re
from jinja2 import evalcontextfilter, Markup, escape
_paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
app = Flask(__name__)
@app.template_filter()
@evalcontextfilter
def nl2br(eval_ctx, value):
result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n') \
for p in _paragraph_re.split(escape(value)))
if eval_ctx.autoescape:
result = Markup(result)
return result
它的问题是它从不应用<br>s 并且总是在每一行周围应用<p>s。
如果我输入:
1
2
3
4
在textarea 中,它以“u'1\r\n2\r\n\r\n3\r\n4'”的形式保存到数据库中,并且在使用 |nl2br 过滤器放入 Jinja 时出来
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
我正在寻找它
<p>1<br>2</p>
<p>3<br>4</p>
这种正则表达式方法对于我所追求的来说似乎有点过头了。
请告诉我有一种更简单的方法可以完成此任务,因为我整天都在努力解决这个问题...
【问题讨论】:
-
阅读和理解stackoverflow.com/a/21154829/1709587 处的答案将为尝试使用此示例的任何其他人提供良好的服务,该答案修复了此 nl2br sn-p 中另一个不相关的错误。或者,就此而言,使用来自jinja.pocoo.org/docs/api/#custom-filters 的官方文档示例
nl2br过滤器,而不是这个严重损坏的非官方sn-p。
标签: python regex flask template-engine jinja2