Flaskで変数を文字列ではなくHTMLのタグとして読み込ませたい

投稿者: Anonymous

下記のコードのコードを実行すると、ブラウザ側ではこのように表示されてしまいます。
ブラウザの表示
下記のコードのdivを文字列ではなく、HTMLとして読み込ませるにはどうしたら良いのでしょうか。

ご回答頂けますと、幸いです。

# 以上略
@app.route('/')
def index():

    div = '<div>test</div>'

return render_template('index.html', div=div)
# 以下略

解決

Passing HTML to template using Flask/Jinja2に同様の質問がありました。
また、Flask メモに参考となるコードがありました。

方法は2つあるそうです。

  1. MarkupSafe.Markupを使い変数をsafeにする
  2. テンプレート内で |safeフィルターを使い変数をsafeにする

1. MarkupSafe.Markupを使い変数をsafeにする

from flask import Markup
# 略

@app.route('/')
def index():
    div = Markup('<div>test</div>') # divはエスケープ不要なsafeとして扱われる
    return render_template('index.html', div=div)

テンプレート内で |safeフィルターを使い変数をsafeにする

テンプレート内で、div変数を |safeフィルターを使いsafeにする。

<body>
  {{ div | safe }}
</body>
回答者: user28902

Leave a Reply

Your email address will not be published. Required fields are marked *