質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

846閲覧

クエリー結果をhtmlで表示したい

tami.py

総合スコア32

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/05/17 06:27

クエリー結果が、HTMLで表示できない(涙

FLASKを使用し、MYSQLのクエリー結果をwebに表示させたいと思っていますが、webにはnoneと表示されてしまい、困っています。

すでに4日間、この問題を解決するためにネットで色々調べておりますが、なかなか解決まで至れずにおります(涙
問題があるのが、FLASK側なのか、HTML側なのかの判断すらついておりません。
クエリー結果は、ターミナル上では、正常にprintできております。
クエリー結果ではなく、FLASKからhtmlに飛ぶだけならうまく実行できるようになりました。

flask

1@app.route("/menyu") 2def select_sql(): 3 return render_template('menyu.html', m_d = m_l)

この構文が悪いのか、

html

1<p><li>{{ m_d }}</li></p>

この構文が悪いのかではないかと推察しております。
(両方の可能性が高いですが・・・)
参考までにFLASKの全文とhtmlの全文(/menyu)も添付させてもらいます

flask

1 2#!/usr/bin/python3 3 4# -- coding: utf-8 -- 5 6from flask import Flask,request,render_template 7import mysql.connector as c_data 8 9app = Flask( __name__ ) 10 11con = c_data.connect( 12 database = 'c_data', 13 user = 'root', 14 password = 'mta969696' , 15 host = 'localhost', 16 port = '3306',) 17 18# カーソルを取得して、処理終了時には自動でカーソルをcloseする。 19with con.cursor() as cursor: 20 21 # SQLの実行 22 sql = "SELECT * FROM menyus where date between\ 23 date_add( now(), interval -1 day ) and\ 24 date_add( now(), interval 6 day ) " 25 cursor.execute(sql) 26 27 # SQLの実行結果を取得 28 for m_l in cursor.fetchall(): 29 m_l = print(m_l) 30 31@app.route("/") 32def index(): 33 return render_template('index.html') 34 35@app.route("/menyu") 36def select_sql(): 37 return render_template('menyu.html', m_d = m_l) 38 39if __name__ == "__main__": 40 app.run(host="127.0.0.1", port=8080)

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>料理リスト</title> 8</head> 9<body> 10 11 <p><li>{{ m_d }}</li></p> 12 13 14</body> 15</html>

ご教授、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

py

1# SQLの実行結果を取得 2m_l = cursor.fetchall()

な感じでm_lにはリストで渡しておいて、

html

1<ul> 2{% for menu in m_d %} 3 <li>{{ menu.id }} {{ menu.category }} {{ menu.name }}</li> 4{% endfor %} 5</ul>

html側ではfor文でぐるぐる回しながら<li>にセットすれば
リストで表示できないですかね。
(id, category, nameは適当です。
SELECT * FROM menyusで取得しているカラム名です)

↓この人の記事は今やっていることに近そうなので参考になるかもです。
Flaskの簡単な使い方

投稿2022/05/17 18:32

編集2022/05/17 18:59
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tami.py

2022/05/18 01:30

waspmanさん ご回答ありがとうございます。おかげで、これまで「None」と表示されていたのが、 「・」が7段表示されるところまで来ました。 HTMLの文章を 、、、 {% for menu in m_l %} <li>{{m_l.ryouri_1}}{{m_l.ryouri_2}}{{m_l.date}}</li> {% endfor %} 、、、 にしたのですが、ryouri_1とかのデータが表示されない状況です。 あと少しっぽいので悔しいです(涙
退会済みユーザー

退会済みユーザー

2022/05/18 02:58 編集

{% for menu in m_l %} <li>{{menu}}</li> {% endfor %} にするとどうなりますか? <li>{{m_l}}</li> じゃなくて、 <li>{{menu}}</li> ですよ。 for menu in m_l でmlのリストの中身をひとつづつ menu にセットしているので <li>で指定するときは menu を使わないと menu 変数にセットした意味がありません。 今回で言うと、おそらく以下の記述であれば動きそうですが、上記の考え方で試してみてください。 {% for menu in m_l %} <li>{{menu.ryouri_1}} {{menu.ryouri_2}} {{menu.date}}</li> {% endfor %}
guest

0

自己解決

問題解決しました。
参考までにコードも記載しておきます。

python

1#!/usr/bin/python3 2 3# -- coding: utf-8 -- 4 5from flask import Flask,render_template 6import mysql.connector as c_data 7 8app = Flask( __name__ ) 9 10con = c_data.connect( 11 database = 'c_data', 12 user = 'root', 13 password = 'mta969696' , 14 host = 'localhost', 15 port = '3306',) 16 17# カーソルを取得して、処理終了時には自動でカーソルをcloseする。 18with con.cursor() as cursor: 19 20 # SQLの実行 21 sql = "SELECT * FROM menus_sql where date between\ 22 date_add( now(), interval -1 day ) and\ 23 date_add( now(), interval 6 day ) " 24 cursor.execute(sql) 25 26 # SQLの実行結果を取得 27 menu_s = cursor.fetchall() 28 29 cursor.close() 30 con.close() 31 32@app.route("/") 33def select_sql(): 34 return render_template('menu.html', menu_s = menu_s ) 35 36if __name__ == "__main__": 37 app.run(host="127.0.0.1", port=8080)

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7</head> 8<body> 9 {% block content %} 10 <h3>メニュー</h3> 11 <ul> 12 {% for item in menu_s %} 13 <li>{{ item }}</li> 14 {% endfor %} 15 </ul> 16 {% endblock %} 17 18 19</body> 20</html>

投稿2022/05/18 04:53

tami.py

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下の処理だとm_lにはprint関数の戻り値であるNoneが入ります。

Python

1 # SQLの実行結果を取得 2 for m_l in cursor.fetchall(): 3 m_l = print(m_l)

リストなりに入れるようにしましょう。
また、m_lの結果、およびそれをどのように表示したいかによりますが、テンプレートのほうもfor文で処理する必要があるように思います。

投稿2022/05/17 06:44

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tami.py

2022/05/17 10:01

can110さん、ご返信ありがとうございます。 Noneと表示されているのは、ちゃんと構文がHTMLに引き渡されていた正しい結果だったのですね。 ご指摘の感じだとpythonの方の return render_template('menyu.html', m_d = m_l)のm_d=m_lの部分と テンプレート(html)の方の <body> <p><li>{{ m_d }}</li></p> </body> も直さなきゃいけないわけですね。 m_lの結果ですが、 ('6お菓子', '抹茶', datetime.date(2022, 5, 17)) ('7お菓子', '抹茶', datetime.date(2022, 5, 18)) ('8お菓子', '抹茶', datetime.date(2022, 5, 19)) ('9お菓子', '抹茶', datetime.date(2022, 5, 20)) ('10お菓子', '抹茶', datetime.date(2022, 5, 21)) ('11お菓子', '抹茶', datetime.date(2022, 5, 22)) ('12', 'll', datetime.date(2022, 5, 23)) と表示してほしいのです。 本当は、datetime.datetimeは、きえてほしいですが・・・。 教えていただいてからも試行錯誤してみましたが、全く見当がつかずです(涙
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問