当我遇到 '\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)
所以事实证明,flask 会自动转义 html 标签。因此,添加<br>
标签只是将它们呈现在屏幕上,而不是实际创建换行符。
有两种解决方法:
将文本分解为数组
text = text.split('\n')
然后在模板中,使用 for 循环:
{% for para in text %}
<p>{{para}}</p>
{% endfor %}
禁用自动转义
首先我们使用replace\n
替换<br>
:
text = text.replace('\n', '<br>')
然后我们通过包围我们需要的块来禁用自动转义
{% autoescape false %}
{{text}}
{% endautoescape %}
每当您这样做时,请对您在此块中使用的变量非常谨慎。
我认为第一个版本避免了第二个版本中存在的漏洞,同时仍然很容易理解。
换行符仅在特定情况下对 HTML 呈现有影响。您需要使用表示换行符的 HTML 标记,例如<br/>
.
def root():
str='yay<br/>super'
return str
万一有人像我一样来到这里,并且出于安全原因不想使用 {% autoescape false %},也不想在某些情况下不方便使用文本,我在这里找到了一个不错的选择:
from flask import Markup
value = Markup('First line.<br>Second line.<br>')
然后在 jinja 模板中:
{{ value }}
我建议<br>
而不是<p>
{% for para in text %}
{{para}}<br>
{% endfor %}
然后结果不那么笨重
我来晚了,但这是我的解决方案。
HTML 有一个<pre>
标签,在这种情况下可以证明是有用的。
<pre>{{ your_text }}</pre>
这个标签告诉浏览器不要自动调整间距和换行符。
要了解有关此标签的更多信息,请查看本指南。