@Ganki
Coding

Как заменить символ новой строки на тег?

Заранее спасибо за ответы

Пишу приложение на Flask, есть простая форма ввода сообщения. Сообщение вводится и сохраняется в базе данных. Но все сообщение получается в одну строчку.

Подскажите пожалуйста как при отображении сообщения символы новой строки ("\r\n", "\r", "\n") перевести в тег

# model.py (модель в базе данных)

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)


# index.html

<html>
  <head>
    <title>WWW Site</title>
  </head>
  <body>
    {{ post.body }}
  </body>
</html>
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
@Ganki Автор вопроса
Coding
Решил проблему следующим образом:

Поправил модель базы данных и добавил метод

# 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>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы