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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

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

Q&A

解決済

3回答

1290閲覧

HTMLの特定文字(value値)をキーにして、外部エクセルファイルから、データ取得した上で、表示する方法

yujin1202

総合スコア61

Flask

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

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

0グッド

0クリップ

投稿2021/04/21 09:30

自分が想定している解決法が全く違うかも知れませんが、教えて頂きたく。

下記の様なWebアプリケーションを、Python+Flaskで作成しました。

イメージ説明

行きたい国を選んで、「送信」ボタンを押すと、こんな様に表示するところまでは、完成しております。
ここまでが、「出来ている所」です。(コードは文末に記載しております。)

イメージ説明

<やりたい事>
上記の2つ目表示で、選択された各国に対して、別のエクセル(あるいはDB)から、補足情報を引っ張ってきた上で、追記したいと思っております。

つまり、1枚目の「送信」ボタンをクリックした後に、こんな風に表示させたいと思っております。
↓    ↓     ↓
イメージ説明

”Agency Name”とか、”emailアドレス”は、別のエクセルシートから、国名をキーにして引っ張ってきた上で、上記の様に表示したいと思っております。

<質問>
多分、htmlのチェックボックスのValueの部分に、何か追記するんだと思うのですが、かなり試行錯誤したのですが、分かりません。
教えて頂きたく。
多分ですが、value="Afganhanistan"となっているとこに、「この国名をキーにして、別紙のエクセルシートのB列とC列の該当セルを引っ張ってこい。」みたいな記載を書き足す事になると思うのですが。。。。

<現在のHTMLの該当部分抜粋>

======================= <div> <label for="ck1">Afgahanistan:</label> <input type="checkbox" id="ck1" name="checkbox" value="Afgahanistan"> </div> ======================コード

あるいは、別のやり方があるのでしょうか? 
よろしくお願いいたします。

<御参考>


参考までに、「出来ている所」までのコードを記載します。
<Pythonのコード>

# -*- coding: utf-8 -*- from flask import Flask, render_template from collections import defaultdict from flask import request app = Flask(__name__) @app.route('/', methods=['GET']) def get(): return render_template('index1.html', \ title = 'Form Sample(get)', \ message = 'Where do you want to go?') @app.route('/', methods=['POST']) def post(): name = request.form.getlist('checkbox') return render_template( 'index2.html', title = 'Form Sample(postx)', message = name, ) if __name__ == '__main__': app.run()

<Index1.htmlのコード>

<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hello World</title> </head> <body> <h1>{{ title }}</h1> <p>{{ message }}</p> <form action="/" method="POST" enctype="multipart/form-data"> <div> <label for="ck1">Afgahanistan:</label> <input type="checkbox" id="ck1" name="checkbox" value="Afgahanistan"> </div> <div> <label for="ck2">Australia:</label> <input type="checkbox" id="ck2" name="checkbox" value="Australia"> </div> <div> <label for="ck3">Australia:</label> <input type="checkbox" id="ck3" name="checkbox" value="Australia"> </div> <div> <label for="ck4">France:</label> <input type="checkbox" id="ck4" name="checkbox" value="France"> </div> <div> <input type="submit" value="送信"> </div> </form> </body> </html>

<Index2.htmlのコード>

<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hello World</title> </head> <body> <h1>{{ title }}</h1> <p> {% for msg in message %} {{ msg }}<br> {% endfor %} </p> </form> </body> </html>コード

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

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

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

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

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

guest

回答3

0

自己解決

seastar3さんから頂いたヒントを元に、丸1日、ネットで探しまくり、やっと解決しました。
ありがとうございました。
下記にコードを含めて、書こうと思います。

1.まず、フロントエンドとバックエンドの理解が自分的には曖昧で、ここが根本原因でした。
HTMLとPython側のデータ遣り取りの全体像は、下記サイトがとても明瞭でした。
→ https://dividable.net/programming/python/python-web-aplication-development

2.で、実装に関してですが、クライアントサイト(フロントサイド)からデータを渡したり、チェックボックスのHTMLの書き方と、PythonのGETとPOSTの使い方が甘かったです。
ここが良かったです。
https://tanuhack.com/flask-client2server/

3.「送信後ボタン」のクリック後に、国名をキーにして、補足データを足す方法は、結局、Pythonの配列(辞書機能)を使いました。その辺の情報はここ。
(出来れば、DBから直接取りたいので、別案も今後は考えていきますが。。。)
https://tanuhack.com/flask-client2server/

(後記)Flaskで、DBからデータ取得する方法ですが、この記事が分かり易かったです。(自分の備忘録みたいになっており、恐縮ですが。)
https://ailog.site/2020/05/29/0529/

最終的なコードは下記になります。

■ <Pythonのコード。app.py >

# -*- coding: utf-8 -*- from flask import Flask, render_template from collections import defaultdict from flask import request app = Flask(__name__) @app.route('/', methods=['GET']) def get(): return render_template('index1.html', \ title = 'Form Sample(get)', \ message = 'Where do you want to go?') @app.route('/', methods=['POST']) def post(): name = request.form.getlist('checkbox') agency={'Afgahanistan':'ABC Travel','Australia':'DEF Travel','England':'GHI Travel','France':'JKF Travel'} return render_template( 'index2.html',arr=agency, title = 'Form Sample(postxyz)', message = name, ) if __name__ == '__main__': app.run()

■ <HTML, Index1.html>

<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hello World</title> </head> <body> <h1>{{ title }}</h1> <p>{{ message }}</p> <form action="/" method="POST" enctype="multipart/form-data"> <div> <label for="ck1">Afgahanistan:</label> <input type="checkbox" id="ck1" name="checkbox" value="Afgahanistan"> </div> <div> <label for="ck2">Australia:</label> <input type="checkbox" id="ck2" name="checkbox" value="Australia"> </div> <div> <label for="ck3">England:</label> <input type="checkbox" id="ck3" name="checkbox" value="England"> </div> <div> <label for="ck4">France:</label> <input type="checkbox" id="ck4" name="checkbox" value="France"> </div> <div> <input type="submit" value="送信"> </div> </form> </body> </html>コード

■<HTML, index2.html>

<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Hello World</title> </head> <body> <h1>{{ title }}</h1> <p> {% for msg in message %} {{msg}}:{{arr[msg]}}<br> {% endfor %} </p> </form> </body> </html>コード

投稿2021/04/22 15:02

編集2021/04/23 00:37
yujin1202

総合スコア61

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

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

guest

0

2 番目の記事が端的にワークシートを操るやり方で、最初の記事がチェックボックスの指定を受け渡すやり方です。post渡しとget渡しがありますから、調べてみましょう。
そして、返事を受け取り、データを編集して、端末の画面に返事するプログラムを作らなければいけません。

投稿2021/04/22 05:32

seastar3

総合スコア2287

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

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

0

丸投げですが、Webページのチェックボックスの指定をpythonで受け取るのは、次の記事が参考になります。
python - Pythonでチェックボックスを取得する方法

また、Excelのワークシートを指定して、フィルタを働かせるのは、次の記事が参考になります。
(Python) openpyxlの利用 〜 フィルター一致〜

投稿2021/04/21 11:37

seastar3

総合スコア2287

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

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

yujin1202

2021/04/22 02:54

早速の御回答をありがとうございます。 2つ目のリンク内容(Openpyxlでフィルター機能を使い、キーで引っ掛ける」が有効と考え、昨夜から色々と弄っております。 リンクの例では、”Aさん”とか”Cさん”と言う固定値で取り出しております。 固定値で取り出せば、確かにフィルターを働かせることは可能なのですが、”Aさん”とか”Cさん”と言った固定値ではなく、「チェックボックスでチェックされた値」を動的に埋め込む部分で詰まっております。 何か参考サイトでもありましたら、引き続き、教えて頂きたく。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問