Python 使用'\n';烧瓶里的人物?

Python 使用'\n';烧瓶里的人物?,python,flask,Python,Flask,我在玩flask时,遇到了“\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呈现有影响。您需

我在玩flask时,遇到了“\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标记,例如

def root():
    str='yay<br/>super'
    return str
def root():
str='yay
超级' 返回str
所以flask自动转义html标记。因此,添加

标记只是在屏幕上呈现它们,而不是实际创建换行符

有两种解决方法:

  • 将文本分成一个数组

    text = text.split('\n')
    
    然后在模板中,使用for循环:

    {% for para in text %}
        <p>{{para}}</p>
    {% endfor %}
    
    然后,我们通过包围需要的块来禁用自动转义

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

    无论何时进行此操作,请非常小心此块中使用的变量

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

  • 为我工作,维护安全
  • 我建议

    而不是

    {% for para in text %}
        {{para}}<br>
    {% endfor %}
    
    {%用于文本%中的段落]
    {{para}}
    {%endfor%}

    然后结果就不会那么笨重了

    如果有人像我一样来到这里,出于安全原因,也不想使用{%autoescape false%},或者在某些情况下可能会不方便的文本,我找到了一个很好的替代方案:


    这是正确的,但是如果你不介意的话,如果我把它放在一个块元素中,我该怎么做?你说的块元素是什么意思?例如,如果我放一个像这样的变量{%block content%}{{stuff}{%endblock%}{%endblock%}不,实际上它是在为我打印

    ,屏幕截图:编辑:H1是对HTML标记的测试,但它与BRA相同,因为这被标记为正确答案@ollien正在经历标准的Jinja2行为。Samarth的回答解决了这个问题。{%autoescape false%}!这就是我要找的,谢谢。链接已经死了。这是烧瓶1.1的例子:为什么使用
    可以保护安全性而不是?我认为他的意思是,它维护的安全性与使用

    一样,但体积较小。我怎么用django做这个?对不起,我从来没有用过django!
    {% for para in text %}
        {{para}}<br>
    {% endfor %}
    
    from flask import Markup
    value = Markup('First line.<br>Second line.<br>')
    
    {{ value }}