Flask Blueprint サンプル

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)