いつもお世話になっております。
https://tech-diary.net/flask-introduction/
上記ページを参考に、FlaskとSQLAlchemyを用いて、[todo.db]の[Post]というテーブルの内容を別ページに送ろうとしております。
Python
1from flask import Flask, render_template, request, redirect 2from datetime import datetime 3from flask_sqlalchemy import SQLAlchemy 4 5app = Flask(__name__) 6app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db' 7db = SQLAlchemy(app) 8 9class Post(db.Model): 10 id = db.Column(db.Integer, primary_key=True) 11 title = db.Column(db.String(30), nullable=False) 12 detail = db.Column(db.String(100)) 13 due = db.Column(db.String(20)) 14 15 16@app.route('/', methods=['GET', 'POST']) 17def index(): 18 if request.method == 'GET': 19 #↓↓↓ここでデータベースのデータを取り出し、postsという名前をつけてindex.htmlへ送っていると思っている 20 posts = Post.query.all() 21 return render_template('index.html', posts=posts) 22 #↑↑↑ 23 else: 24 title = request.form.get('title') 25 detail = request.form.get('detail') 26 due = request.form.get('due') 27 new_post = Post(title=title, detail=detail, due=due) 28 29 db.session.add(new_post) 30 db.session.commit() 31 return redirect('/') 32 33@app.route('/create') 34def create(): 35 return render_template('create.html') 36 37if __name__ == "__main__": 38 app.run(debug=True)
データを受け取って表示させたいindex.htmlは以下の通りです。
HTML
1{% extends 'base.html' %} 2{% block body %} 3<h1>トップページ</h1> 4{% for post in posts %} 5 <h2>タイトル : {{ post.title }}</h2> 6 <h2>詳細 : {{ post.detail }}</h2> 7 <h2>期限 : {{ post.due }}</h2> 8{% endfor %} 9{% endblock %}
また、データベースは、テーブル名Postで、以下の4つの列が入っています。
id title detail due
データが入っていることは、DB Brouser for SQLite で確認しました。(idは全てNULLです)
以上の状況で、コマンドプロンプトから当該プログラムのある部分へ行き実行させ、ブラウザでhttp://localhost:5000/へアクセスした画面がこちらになります。
各項目の右にデータが表示されるだろうと考えましたが、これが表示されません。
create.htmlで書き込んだデータは正しくデータベースに入りましたので、表示のさせ方がおかしいのかと考えておりますが、どうにも分かりませんでした。修正すべき部分をご指摘頂きたく存じます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。