Решил проблему следующим образом:
Поправил модель базы данных и добавил метод# model.py
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.Text)
body_html = db.Column(db.Text)
@staticmethod
def on_changed_body(target, value, oldvalue, initiator):
value = value.replace('\r\n', '<br>')
value = value.replace('\r', '<br>')
value = value.replace('\n', '<br>')
target.body_html = bleach.clean(value, tags=['br'], strip=True)
db.event.listen(Post.body, 'set', Post.on_changed_body)
Вывод результата# index.html
<html>
<head>
<title>WWW Site</title>
</head>
<body>
{% for post in posts %}
{% if post.body_html %}
{{ post.body_html | safe }}
{% else %}
{{ post.body }}
{% endif %}
{% endfor %}
</body>
</html>
Подсказали более простое решение:<div style="white-space: pre-wrap">{{ post.body }}</div>