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

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

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

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

7310閲覧

render_templateでhtmlにjsonデータを渡したい

hood

総合スコア351

Flask

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/16 07:27

###render_templateでhtmlにjsonデータを渡したい
リストオブジェクトを「viewを担当するpythonファイル」と、「htmlファイル」の間で送受信したいです。
そのためにはjsonデータを使う必要があると聞きました。

なので、手始めに私は「viewを担当するpythonファイル」でリストオブジェクトをjsonデータに変えました。
しかしいざrender_templateを書く段になって、「jsonデータをhtmlに渡したあと、どうやってリストとして展開すればいいのだろうか」と詰まってしまいました。

ググっても検索能力の低さからか、役たちそうなサイトは見つからず、いっそ聞いてしまおうと思い質問させていただきました。

話を単純にするため以下に最小限のコードを書きます。jsonを受け取ったhtmlはどうやってそのデータを解凍?し展開すればよいのでしょう?

python

1#jsonのデータを使いhtmlをレンダリングする。 2@@app.route(・・・) 3def sample(): 4---- 5dic ={#jsonデータを作る。 6 "sen":sentence,#それぞれリストとなっている。 7 "clu":cluster 8 } 9return render_template('clus_feel.html', getjson = dic)#一応getjsonを指定しておいたけど、htmlでどういうふうに使えばいいのかわからない・・・

html

1 2  <div class="row"> 3 <div class="col"> 4 <input type="text" class="form-control" value="jsonにしたsentenceを入れたい"> 5 </div> 6 <div class="col"> 7 <input type="number" class="form-control" value="jsonにしたclusterを入れたい"> 8 </div> 9 </div>

htmlの表示のイメージとして以下のようになってくれれば、万々歳です
sentence[1] cluster[1]
sentence[2] cluster[2]
sentence[3] cluster[3]
・・・・

大変初歩的なことをお聞きしていると思いますので、直接的な回答でなくても、参考とするべきサイトや、どんな勉強が足りないのかの情報だけでも大歓迎です。

このままでは文豪ドストエフスキーが書いたように、山盛りになった玉を一つづつ向こう側に運び、それをまたこっちに運ぶのを繰り返すような、無限の輪廻の中です・・・

どうかご助言いただきたいです・・・

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

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

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

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

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

guest

回答1

0

ベストアンサー

例えば次のように書くとよいのではないかと思います。

patch

1- return render_template('clus_feel.html', getjson = dic)#一応getjsonを指定しておいたけど、htmlでどういうふうに使えばいいのかわからない・・・ 2+ return render_template('clus_feel.html', pairs=zip(sentence, cluster))

html

1{% for s, c in pairs %} 2 <div class="row"> 3 <div class="col"> 4 <input type="text" class="form-control" value="{{ s }}"> 5 </div> 6 <div class="col"> 7 <input type="number" class="form-control" value="{{ c }}"> 8 </div> 9 </div> 10{% endfor %}

尚、前提として、 sentencecluster は各要素がすべて strlist だと想定しています。

以下補足です。

Jinja2 で 2 つの list を同時に回すかんたんな方法はデフォルトで用意されていなかった気がしますので(調べずに言っているので間違っている可能性があります)、 sentencecluster の各要素が関係しているのであれば、テンプレートに渡す際は dict ではなく、各要素が sentencecluster の各要素のペアになった list (厳密には list ではありませんが説明を単純化するために list と呼びます)として渡した方が、テンプレート側での処理がかんたんになるかと思います。

そうではなく、あくまでもテンプレートには dict として変数を渡したいということであれば、各要素は getjson['sen'][0] 等でアクセスできるかと思いますので、そのようにされるとよいのではないでしょうか。

参考:

投稿2019/02/18 05:44

編集2019/02/18 08:56
gh640

総合スコア1407

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

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

hood

2019/02/18 13:26

回答ありがとうございます! 私が書いておくべきだったので申し訳ないのですが、実はzipはすでに試しまして、二つのリストを展開することには成功していました。それをpostメソッドで回収することができなかったので、jsonを使おうということになったのです・・・ 前の投稿にもgh640さんには回答していただきましたね・・・そこでも書いた通り、私の実力ではwebアプリは少しきついと思ったので、guiに切り替えようと思います。 親切にも二つの投稿を考えてくださり、本当にありがとうございました・・・!
gh640

2019/03/02 09:22

すみません、コメントをいただいたのに反応が遅くなってしまいました。。。そうでしたか! はい、またチャンスがあればチャレンジされてみてください :D
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問