===================== Flaskでモデルを使う ===================== GETに対応する ============= `前章で用意したモデル `_ をFlaskで使うためにモデルをimportします。 ルートにアクセスしたらコンテンツのタイトル一覧を表示し、/titleにアクセスしたら内容を表示するようにします。 app.py .. code-block:: python from flask import Flask, render_template, abort from flaski.models import WikiContent app = Flask(__name__) app.config['DEBUG'] = True @app.route("/") def hello(): contents = WikiContent.query.all() return render_template("index.html", contents=contents) @app.route("/", methods=["GET"]) def show_content(title): content = WikiContent.query.filter_by(title=title).first() if content is None: abort(404) return render_template("show_content.html", content=content) if __name__ == "__main__": app.run() .. note:: database.pyでBaseクラスにqueryメソッドを追加しておいたので、 WIkiContentクラスから、allで全件検索、filter_byでフィルタリングがで きるようになっています。詳しくはSQLAlchemyのドキュメントを参照してください。 app.routeでは<>で囲むことで/以下の文字列を、変数titleとしてキャプチャしています。 show_content関数は、モデルに対しtitle名で検索をかけ、データが存在しない場合は404エラーを返します(abort(404))。 index.html .. code-block:: html {% extends "layout.html" %} {% block body %} <h1>Flaski</h1> <img src="{{url_for('static', filename='snake.jpg')}}" alt="snake"/> <ul> {% for content in contents %} <li><a href="{{url_for('show_content', title=content.title)}}">{{content.title}}</a></li> {% endfor%} </ul> {% endblock %} for文でcontentsをループさせ、タイトルをリンク付きでリスト表示させる処理を追加しています。 タイトルはapp.pyから送る必要がないので、ハードコードするように変更しました。 新たに個別のコンテンツ用のテンプレートも用意します show_content.html .. code-block:: html {% extends "layout.html" %} {% block body %} <h1>{{content.title}}</h1> <div>{{content.body}}</div> <p>{{content.date}}</p> {% endblock %} コンテンツがリスト表示されることを確認します。 .. image:: static/flaski3.png ここまでのGitHub ================ - `モデルを扱う <https://github.com/kzfm/flaski/commit/9a7b0f5335ce7c516d4663b8301112bfd5072c6b>`_