2013-08-14 11 views
14

flash()はリダイレクトされたページに文字列のみを表示することを理解しています。 私はこれを克服するためにどのような方法があるフラスコのメッセージからhtmlコンテンツを表示する方法は?

<div class="flashes"> 
    {% for message in get_flashed_messages()%} 
    {{ message }} 
    {% endfor %} 
</div> 

output.htmlフラッシュ

message = "<h1>Voila! Platform is ready to used</h1>" 
flash(message) 
return render_template('output.html') 

てHTMLを送信しようとしている。しかし、それは文字列<h1>Voila! Platform is ready to used</h1>として表示しているメートル。

+0

有用かもしれない、第二の答えが正しい答えです。 @ naga4ce –

答えて

27

動作します{{message|safe}}を使用して、また、あなたのページに悪意のあるHTMLやJavascriptを注入するため、攻撃者のための扉を開き、また、XSS攻撃を知られています。さらに詳しい情報here興味があれば。

可能な場合には、より安全なアプローチがwrap your string in a Markup object before passing it to the template:にある

Pythonコード:

from flask import Markup 

message = Markup("<h1>Voila! Platform is ready to used</h1>") 
flash(message) 
return render_template('output.html') 

Jinja2のテンプレート:あなたがコントロールしたい場合があります例用

<div class="flashes"> 
    {% for message in get_flashed_messages() %} 
    {{ message }} 
    {% endfor %} 
</div> 
+0

優れた答え。あなたが慎重でなければならない場所はまだあります。公式の文書リンクにあるユーザーから提出されたデータにマークアップを呼び出すことです。これを説明できますか? – arsho

10

使用safe filter

<div class="flashes"> 
    {% for message in get_flashed_messages()%} 
    {{ message|safe }} 
    {% endfor %} 
</div> 
+1

感謝の男はチャンピオンのように働いた:) – naga4ce

3

メッセージの状態に応じてCSSが適用されます(成功|エラー)、次のコードが受け入れ答えを更新してください

{% for category, msg in get_flashed_messages(with_categories=true) %} 

    <div class="alert {{ category }} alert-dismissible" role="alert"> 
          <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> 
          {{ msg|safe }} 
    </div> 

{%ENDFOR%}

関連する問題