Flask(自動エスケープが有効)でJinjaを使用していて、このフィルターを適用しようとしています
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'」としてDBに保存され、|nl2br
フィルターを使用してJinjaに入れると、次のように出力されます。
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
私はそれがなることを探しています
<p>1<br>2</p>
<p>3<br>4</p>
この正規表現の方法は、私が求めているものにはやり過ぎのようです。
私はそれを理解しようと一日中髪を抜いてきたので、これを達成するためのより簡単な方法があることを教えてください...