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