Ответ 1
Новые строки влияют только на рендеринг HTML в конкретных случаях. Вам нужно будет использовать HTML-тег, представляющий новую строку, например <br/>
.
def root():
str='yay<br/>super'
return str
Я играл с флягой, когда сталкивался с нечетной проблемой с символом "\n". он, похоже, не имеет эффекта в моем браузере, я пытался разместить там
, но он не работал, никаких идей?
from flask import Flask
from flask import render_template
test=Flask(__name__)
@test.route('/')
def root():
str='yay\nsuper'
return str
test.run(debug=True)
Новые строки влияют только на рендеринг HTML в конкретных случаях. Вам нужно будет использовать HTML-тег, представляющий новую строку, например <br/>
.
def root():
str='yay<br/>super'
return str
Вот и получается, что фляжка автоэкранирует html-теги. Поэтому добавление тега <br>
просто отображает их на экране, а не создает разрывы строк.
Есть два обходных пути:
Разбейте текст на массив
text = text.split('\n')
А затем в шаблоне используйте цикл for:
{% for para in text %}
<p>{{para}}</p>
{% endfor %}
Отключить автоэкранирование
Сначала мы заменим \n
на <br>
, используя replace:
text = text.replace('\n', '<br>')
Затем мы отключаем автоэкранирование, окружая блок, где нам это требуется, с помощью
{% autoescape false %}
{{text}}
{% endautoescape %}
Однако мы не рекомендуем делать это:
Всякий раз, когда вы делаете это, будьте очень осторожны с переменными, которые вы используете в этом блоке.
Я думаю, что первая версия избегает уязвимостей, присутствующих во второй версии, хотя все еще довольно легко понять.
Я бы предложил <br>
, а не <p>
{% for para in text %}
{{para}}<br>
{% endfor %}
тогда результат будет менее громоздким