teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

io\.BytesIOの使い方は、解決しました。render_templateの使い方が解決していないのアドバイスをお願いします。

2017/08/25 14:16

投稿

Gyutan
Gyutan

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- PythonのFlaskでのBytesIOとrender_templateの使い
1
+ PythonのFlaskでのrender_templateで画像ファイル表示
body CHANGED
@@ -1,13 +1,13 @@
1
1
  ###前提・実現したいこと
2
2
  PythonのFlaskのフレームワークを用いて、QRコードを作成して、それを表示させるプログラムを作成しています。(python3)
3
- わからないことが3点あります。
3
+ わからないこと
4
- (1)QRコードをio.BytesIO()に保存する方法。
4
+ QRコードをio.BytesIO()に保存したのち、
5
- 2)render_template()を使ってこの画像をHTMLに当てはめる方法
5
+ 1)render_template()を使ってこの画像をHTMLに当てはめる方法
6
- 3)HTML側のテンプレートの記載方法
6
+ 2)HTML側のテンプレートの記載方法
7
7
 
8
8
  ###発生している問題・エラーメッセージ
9
9
 
10
- HTMLに画像が表示されません
10
+ HTMLに画像が表示されません。404エラーが出ます。
11
11
 
12
12
 
13
13
  ###該当のソースコード
@@ -30,19 +30,21 @@
30
30
  return render_template('index.html',time=timeString)
31
31
 
32
32
 
33
- # code generater and output
34
33
  @app.route('/input_code', methods=['POST'])
35
34
  def input_code():
36
35
  code_input = request.form['code']
37
- qr_img = qr.make(str(code_input))
36
+ qr_img = QRmaker(code_input)
38
-
39
- #ここの使い方がわかりません。
40
37
  img_bin = io.BytesIO()
41
38
  qr_img.save(img_bin, 'png')
39
+ #seek(0)が必要
42
- fig_url=img_bin
40
+ img_bin.seek(0)
41
+ # Responseやsend_fileだとうまく表示されます。
42
+ return Response(img_bin, mimetype='image/png')
43
+ #return send_file(img_bin, mimetype='image/png')
43
44
 
44
- #ここの記述の仕方がわかりません
45
+ #ここの記述の仕方がわかりません。404エラーが出ます。
46
+ #fig_url=img_bin
45
- return render_template("output_code.html", data=code_input, fig=fig_url)
47
+ #return render_template("output_code.html", data=code_input,fig=fig_url)
46
48
 
47
49
  # retry and quit
48
50
  @app.route('/event', methods=['POST'] )
@@ -97,18 +99,10 @@
97
99
  <h2>{{data}}</h2>
98
100
 
99
101
  <h2>QR image</h2>
102
+ <!--ここの記述があっているかどうかわかりません。-->
100
103
  <img src="{{fig }}">
101
104
  </body>
102
105
  </html>
103
106
  ```
104
107
 
105
- ###補足情報
108
+ ###補足情報
106
- レスポンスの方法がいくつかあるように感じますが、レスポンスの種類と使い方について教えていただけるとありがたいです。
107
- レスポンスの種類(return)の後に書く関数は、
108
- (1) render_template()
109
- →テンプレートに値をはめ込む?
110
- (2) redirect()
111
- →違うURLに飛ばす?
112
- (3) Response()
113
- (4) send_file()
114
- などがありますが、このうち(3),(4)はどのような時に使うかを教えていただけるとありがたいです。