質問編集履歴

1

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

2017/08/25 14:16

投稿

Gyutan
Gyutan

スコア7

test CHANGED
@@ -1 +1 @@
1
- PythonのFlaskでのBytesIOとrender_templateの使い
1
+ PythonのFlaskでのrender_templateで画像ファイル表示
test CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  PythonのFlaskのフレームワークを用いて、QRコードを作成して、それを表示させるプログラムを作成しています。(python3)
4
4
 
5
- わからないことが3点あります。
5
+ わからないこと
6
-
6
+
7
- (1)QRコードをio.BytesIO()に保存する方法。
7
+ QRコードをio.BytesIO()に保存したのち、
8
-
8
+
9
- 2)render_template()を使ってこの画像をHTMLに当てはめる方法
9
+ 1)render_template()を使ってこの画像をHTMLに当てはめる方法
10
-
10
+
11
- 3)HTML側のテンプレートの記載方法
11
+ 2)HTML側のテンプレートの記載方法
12
12
 
13
13
 
14
14
 
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- HTMLに画像が表示されません
19
+ HTMLに画像が表示されません。404エラーが出ます。
20
20
 
21
21
 
22
22
 
@@ -62,31 +62,35 @@
62
62
 
63
63
 
64
64
 
65
- # code generater and output
66
-
67
65
  @app.route('/input_code', methods=['POST'])
68
66
 
69
67
  def input_code():
70
68
 
71
69
  code_input = request.form['code']
72
70
 
73
- qr_img = qr.make(str(code_input))
71
+ qr_img = QRmaker(code_input)
74
-
75
-
76
-
77
- #ここの使い方がわかりません。
78
72
 
79
73
  img_bin = io.BytesIO()
80
74
 
81
75
  qr_img.save(img_bin, 'png')
82
76
 
77
+ #seek(0)が必要
78
+
79
+ img_bin.seek(0)
80
+
81
+ # Responseやsend_fileだとうまく表示されます。
82
+
83
+ return Response(img_bin, mimetype='image/png')
84
+
85
+ #return send_file(img_bin, mimetype='image/png')
86
+
87
+
88
+
89
+ #ここの記述の仕方がわかりません。404エラーが出ます。
90
+
83
- fig_url=img_bin
91
+ #fig_url=img_bin
84
-
85
-
86
-
87
- #ここの記述の仕方がわかりません
92
+
88
-
89
- return render_template("output_code.html", data=code_input, fig=fig_url)
93
+ #return render_template("output_code.html", data=code_input,fig=fig_url)
90
94
 
91
95
 
92
96
 
@@ -196,6 +200,8 @@
196
200
 
197
201
  <h2>QR image</h2>
198
202
 
203
+ <!--ここの記述があっているかどうかわかりません。-->
204
+
199
205
  <img src="{{fig }}">
200
206
 
201
207
  </body>
@@ -207,21 +213,3 @@
207
213
 
208
214
 
209
215
  ###補足情報
210
-
211
- レスポンスの方法がいくつかあるように感じますが、レスポンスの種類と使い方について教えていただけるとありがたいです。
212
-
213
- レスポンスの種類(return)の後に書く関数は、
214
-
215
- (1) render_template()
216
-
217
- →テンプレートに値をはめ込む?
218
-
219
- (2) redirect()
220
-
221
- →違うURLに飛ばす?
222
-
223
- (3) Response()
224
-
225
- (4) send_file()
226
-
227
- などがありますが、このうち(3),(4)はどのような時に使うかを教えていただけるとありがたいです。