2年前に書いた Flask の Blueprint サンプルは、ページ毎のフォルダに
HTMLテンプレート, CSS, JSを配置するスタイルだった。
oboe2uran.hatenablog.com
こんなんじゃなくて、HTMLテンプレート, CSS, JSは、1つのディレクトリに置いた方が良いか。。。
→ static というディレクトリを用意してそこに置く
page1 、page2 、page3 の view.py は、
template_folder='templates',
から、
template_folder='../static/templates'
以前の static_folder の指定と違って、自ページフォルダ下にCSSとJSを配置しないので、
static_folder='./static' → static_folder='../static'
page1 の view.py は、こうなる。
# -*- coding: utf-8 -*- # page1/views.py from flask import Blueprint, render_template # page1のBlueprint page1 = Blueprint('page1', __name__, url_prefix='/page1', template_folder='../static/templates', static_url_path='/static', static_folder='../static') @page1.route('/') def page1_a(): info = 'Blueprint テスト' return render_template("index1.html", title='page1 タイトル', info=info)
HTMLソースは、前回と同じで良い。
app.py
# -*- coding: utf-8 -*- # app.py import os from flask import Flask, render_template from page1.views import page1 from page2.views import page2 from page3.views import page3 tempfolder = os.path.join(os.path.dirname(__file__), 'common', 'layout') print("tempfolder = %s" % tempfolder) app = Flask(__name__, template_folder=tempfolder, static_folder='common') # domain 先頭ページ @app.route('/') def index(): return render_template("index.html", title='flaskweb タイトル') app.register_blueprint(page1) app.register_blueprint(page2) app.register_blueprint(page3) if __name__ == '__main__': app.run(host='localhost', port=80, debug=True)