Можно создать дубликат:
Why is this Jinja nl2br filter escaping <br>'s but not <p>'s?Есть ли лучший способ применить фильтр nl2br с Jinja/Flask?
Я использую дзиндзя с колбой (включено autoescape), и я пытаюсь применить 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> вокруг каждой строки.
Если я типа:
1
2
3
4
в текстовое поле, оно сохраняется в БД, как "u'1 \ г \ п2 \ г \ п \ г \ n3 \ г \ n4" и когда положить в дзиндзя с | nl2br фильтром он выходит как
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
Я ищу, чтобы быть
<p>1<br>2</p>
<p>3<br>4</p>
этот метод регулярного выражения кажется излишним за то, что я после. Пожалуйста, скажите мне, что это более простой способ добиться этого, поскольку я весь день пытался вытащить свои волосы, пытаясь понять это ...