なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Python】Flaskで表示された結果をHTMLファイルとして保存する

Flaskの表示結果をHTMLファイルとして保存したい

Pythonの軽量webフレームワーク「Flask」を使えば、ユーザーからの入力に対して簡単に動的なhtmlを返す事ができます。

ただFlaskで表示される結果は基本的に一時的なものであり、特に設定をしない限り表示されたhtmlコードが何処かに保存されたりすることは有りません。

そこで今回はFlaskの表示結果をHTMLファイルとしてそのまま保存する方法をご紹介したいと思います。

f:id:karupoimou:20190917063652p:plain:w400
Flask

「render_template」に変数入りのhtmlコードを作成し、with openで書き出す

方法は簡単です。Flaskの関数である「render_template」でテンプレートhtmlに変数を入れたhtmlを作成し、with openでファイルとして保存するだけです。

#代入する値。実際にはフォームからのGET/POST通信での値などを入れるとよい
num=111111

#ここでrender_templateに変数を入れる
html = render_template("output.html",num=num)

#最後にHTMLファイルとして保存
with open("templates/test.html", mode='w',encoding="utf-8") as f:
    f.write(str(html))

注意点としては、保存先を「templates」フォルダにしなければならないということぐらいです。

保存したHTMLファイルの読み込み

読み込みの際には、先程出力したファイルを指定します

#結果の表示
return render_template("test.html")

サンプルコード

from flask import Flask, render_template,request
import datetime

app = Flask(__name__)

#indexページ(フォーム画面)
@app.route('/')
def index():
    
    ###########################
    #代入する値。実際にはフォームからのGET/POST通信での値などを入れるとよい
    num=111111

    #ここでrender_templateに変数を入れる
    html = render_template("output.html",num=num)

    #最後にHTMLファイルとして保存
    with open("templates/test.html", mode='w',encoding="utf-8") as f:
        f.write(str(html))

    ###########################
    
    #結果の表示
    return render_template("test.html")

if __name__ == '__main__':
    app.debug = False#デバッグモードTrueにすると変更が即反映される
    app.run()

HTMLファイルとして書き出しておくことで、表示結果を使いまわしたりできます。