33

当我遇到 '\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)
4

5 回答 5

43

所以事实证明,flask 会自动转义 html 标签。因此,添加<br>标签只是将它们呈现在屏幕上,而不是实际创建换行符。

有两种解决方法:

  1. 将文本分解为数组

    text = text.split('\n')
    

    然后在模板中,使用 for 循环:

    {% for para in text %}
        <p>{{para}}</p>
    {% endfor %}
    
  2. 禁用自动转义

    首先我们使用replace\n替换<br>

    text = text.replace('\n', '<br>')
    

    然后我们通过包围我们需要的块来禁用自动转义

    {% autoescape false %}
        {{text}}
    {% endautoescape %}
    

    但是,我们不鼓励这样做:

    每当您这样做时,请对您在此块中使用的变量非常谨慎。

我认为第一个版本避免了第二个版本中存在的漏洞,同时仍然很容易理解。

于 2017-01-17T10:33:33.540 回答
23

换行符仅在特定情况下对 HTML 呈现有影响。您需要使用表示换行符的 HTML 标记,例如<br/>.

def root():
    str='yay<br/>super'
    return str
于 2012-09-03T08:06:52.740 回答
9

万一有人像我一样来到这里,并且出于安全原因不想使用 {% autoescape false %},也不想在某些情况下不方便使用文本,我在这里找到了一个不错的选择:

from flask import Markup
value = Markup('First line.<br>Second line.<br>')

然后在 jinja 模板中:

{{ value }}
于 2020-06-29T12:59:23.490 回答
2
  1. 为我工作并保持安全

我建议<br>而不是<p>

{% for para in text %}
    {{para}}<br>
{% endfor %}

然后结果不那么笨重

于 2019-03-10T10:15:05.663 回答
0

我来晚了,但这是我的解决方案。
HTML 有一个<pre>标签,在这种情况下可以证明是有用的。

<pre>{{ your_text }}</pre>

这个标签告诉浏览器不要自动调整间距和换行符。
要了解有关此标签的更多信息,请查看指南。

于 2021-10-16T14:05:42.373 回答