Jinja отображает текст в HTML, сохраняя переносы строк

У меня есть простая форма:

class RecordForm(Form):    
    notes = TextAreaField('Notes')

Я записываю данные в три абзаца следующим образом:

para1

para2

para3

В шаблоне я хотел бы видеть содержимое этой записи в режиме только для чтения. (Не редактируемая форма)

запись - это случай модели, содержащей данные:

<td>{{ record.notes }}</td>

- >

<td>para1 para2 para3</td>

Что я могу сделать, чтобы показать многострочные строки?

Ответ 1

Все пробелы, включая символы новой строки, превращаются в одно пространство в HTML.

Ваши варианты, от лучшего к худшему:

  • Поместите white-space: pre-wrap; в содержащийся элемент. Это говорит HTML, чтобы показать все пробелы точно так, как они появляются в источнике, включая новые строки. (Вы также можете использовать тег <pre>, но это также отключит перенос слов, который вам, вероятно, не нужен.)
  • Обращайтесь с обычным текстом как Markdown и бросаем на него процессор Markdown - одна из вещей, которую Markdown делает, - это обертывание абзацев в <p>.
  • В Python-land сделайте .replace('\n', '<br>'). Но это оставляет вас уязвимым для XSS, потому что в строке может быть другой нежелательный HTML-код, а исправление - это немного боль.

Ответ 2

как хранить ваши данные с тегом <br/>

para1
<br/>
para2
<br/>
para3