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

したがって、フラスコはhtmlタグを自動エスケープすることがわかります。したがって、<br>タグを追加すると、実際に改行を作成するのではなく、画面に表示されるだけです。

これには2つの回避策があります。

  1. テキストを配列に分割します

    text = text.split('\n')
    

    次に、テンプレート内でforループを使用します。

    {% for para in text %}
        <p>{{para}}</p>
    {% endfor %}
    
  2. 自動エスケープを無効にする

    まず、\n<br>使用して置換します。

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

    次に、これが必要なブロックを囲んで自動エスケープを無効にします。

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

    ただし、これを行うことはお勧めしません。

    これを行うときは常に、このブロックで使用している変数に十分注意してください。

最初のバージョンは、2番目のバージョンに存在する脆弱性を回避しながら、非常に理解しやすいと思います。

于 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 に答える