flaskでスクレイピングした画像を表示するWebアプリケーションを製作しています。
スクレイピングに時間がかかるのでダウンロードが終わった画像から順にhtmlに表示をしたいです。
画像はformに利用する予定なのですがそのままrender_templateで返すと画像のダウンロードが終わっていないままformを表示してしまいます。
なので画像をスクレイピングする関数から、終わった画像を返すジェネレータを作り、それに基づいて表示しています。
問題は同じformが1ページに何回も表示されてしまうことです
(例)
--form--
1枚目の画像
--form--
1枚目の画像
2枚目の画像
--form--
1枚目の画像
2枚目の画像
3枚目の画像
.
.
.
(理想)
--form--
1枚目の画像
2枚目の画像
3枚目の画像
.
.
.
関数は
Response(stream_with_context(レンダリングされたhtmlを返すジェネレータ))
を使っています
知りたいのはこのformの部分(変更があった部分だけ)をレンダリングして返す方法です。
html
1{% extends "layout.html" %} 2{% block content %} 3 <form action="{{ url_for('PDFPage')}}" method="post"> 4 5 <!-- CHANGE HERE FROM ... --> 6 7 <table> 8 {% for num,info in hoge %} 9 {% if num <= loaded_img %} 10 <tr> 11 <td> 12 <input type="checkbox" name="more_than_zero" checked> 13 </td> 14 <td><img src="static/{{ f_name }}/{{num}}.jpg" width="10%" height="10%"></td> 15 <td>{{info[0]}}</td> 16 <td>{{info[2]}}</td> 17 <td> 18 <select name="card_num"> 19 <option>{{info[2].rstrip("枚")|int}}枚</option> 20 {% for i in range(info[2].rstrip("枚")|int)[::-1] %} 21 <option>{{i}}枚</option> 22 {% endfor %} 23 </select> 24 </td> 25 </tr> 26 {% endif %} 27 {% endfor %} 28 </table> 29 30 <!-- HERE --> 31 32 <button type="submit">PDFを出力</button> 33 </form> 34{% endblock %}
Python
1 def generate_output(): 2 i = gen.__next__() 3 while True: 4 try: 5 yield render_template('result.html',secret=enumerate(d.secretk),f_name=new_name,loaded_img=i) 6 except: 7 break 8 i = gen.__next__() 9 return Response(stream_with_context(generate_output()))
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。