有很多方法可以實現你所需要的。
我試圖解釋其中的兩個,其中一個使用AJAX
和一個單獨的圖像路徑視圖,另一個處理客戶端的所有數據。
這兩個選項都有各自的優缺點。所以,你可以根據自己的喜好來決定。
OPTION我
創建服務器端返回的<img>
與適當src
對於給定frame_number
參數視圖。 然後,在客戶機側,可以經由電流frame_number請求查看和更新的<img>
時
的頁面對於AJAX請求這一新觀點的一個例子是
@app.route('/image')
def image():
task_name = request.args.get('task_name')
try:
frame_number = int(request.args.get('frame_number'))
except (ValueError, TypeError):
frame_number = 1
# this line is just for example
# run your query to get frame_name
frame_name = str(frame_number) + '.png'
return render_template('image.html', task_name=task_name, frame_name=frame_name)
而且,這將是您的image.html
。它只是包含您在annotate.html
<img id="label" src="{{url_for('static', filename= 'data/' + task_name + '/' + frame_name) }}" class="img-thumbnail" width="64" height="64" />
使用最後,在annotate.html
的img
標籤,有一個函數來加載圖像
function loadImage() {
$.ajax({
url: "{{ url_for('image') }}",
type: "get",
data: {
task_name: "{{ task_name }}",
frame_number: $("image").attr("frame-number")
},
success: function(response) {
$("#image").html(response);
},
error: function(xhr) {
$("#image").html("an error occured");
}
});
}
也許,最棘手的部分是存儲當前frame_number
。我建議保存它作爲一個HTML在html元素屬性(最好是,在這裏展示你的形象。)
<div id="image" frame-number="{{ frame_number }}"></div>
所以,在上/下一個按鈕,單擊操作,您可以更新相同的屬性並再次致電loadImage()
。
我創建了一個gist的完整示例。
OPTION II
在這個選項中,你不需要創建一個額外的視圖提供當前圖像。相反,我們將所有數據存儲在客戶端上(同樣以html屬性存儲,但其他方式可能用於此存儲)。而且,通過選項I中的類似分頁實現,我們將能夠選擇正確的frame_name來構建圖像路徑。
我把這個實現的重要部分,詳情你可以檢查這gist。
<!-- here, you can store all the frame names on the client side -->
<!-- notice that 'frames' parameter from view function is no longer available on the client side on you render it -->
<!-- so, this way is kind of a transformation of that information to make it possible to store on the client side -->
{% for frame in frames %}
<div id="frame-name-{{ loop.index }}" name="{{ frame.frame_name }}" hidden="hidden"></div>
{% endfor %}
function getFrameName() {
return $("#frame-name-" + getFrameNumber()).attr("name");
}
function loadImage() {
$("#image").attr("src", "/static/data/" + getTaskName() + "/" + getFrameName());
$("#current").html(getFrameNumber());
}
只是在同一個頁面中,您在呈現頁面之前從數據庫中獲取該信息?並且您想要使用這些值動態創建一些圖像......是嗎? –