【问题标题】:Any way to add a new line from a string with the '\n' character in flask?有什么方法可以从烧瓶中带有“\ n”字符的字符串中添加新行吗?
【发布时间】:2012-09-03 08:03:46
【问题描述】:

我在玩烧瓶时遇到了 '\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)

【问题讨论】:

    标签: python flask


    【解决方案1】:

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

    有两种解决方法:

    1. 将文本分解为数组

      text = text.split('\n')
      

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

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

      首先,我们使用替换将\n 替换为&lt;br&gt;

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

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

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

      However, we are discouraged from doing this:

      无论何时执行此操作,请对您在此块中使用的变量非常谨慎。

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

    【讨论】:

    【解决方案2】:

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

    def root():
        str='yay<br/>super'
        return str
    

    【讨论】:

    • 这是正确的,但如果你不介意,如果我将它放入块元素中,我该怎么做?
    • 块元素是什么意思?
    • 例如,如果我要放置一个像这样的变量 {% block content %} {{stuffs}} {% endblock %}
    • 不,实际上它是为我打印出&lt;br/&gt;,截图:grab.by/fOTO 编辑:H1 是对 HTML 标签的测试,但与 br 相同
    • 因为这被标记为正确答案...@ollien 正在经历标准的 Jinja2 行为。 Samarth 的回答解决了这个问题。
    【解决方案3】:

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

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

    然后在jinja模板中:

    {{ value }}
    

    【讨论】:

    • 我如何在 django 中做到这一点?
    • 对不起,我没用过Django!
    【解决方案4】:
    1. 为我工作并保护安全

    我建议&lt;br&gt; 而不是&lt;p&gt;

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

    那么结果就不那么庞大了

    【讨论】:

    【解决方案5】:

    我参加聚会迟到了,但这是我的解决方案。
    HTML 有一个&lt;pre&gt; 标签,在这种情况下可以证明是有用的。

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-05
      • 1970-01-01
      • 2020-04-30
      • 2012-06-24
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 2011-05-15
      • 2021-05-21
      相关资源
      最近更新 更多