我得到了一个FLASK应用程序,其中一个路由渲染了一个带有特定参数的Folium地图。folium映射被加载到iframe中,每隔x分钟刷新一次。地图生成是由html表单触发的。
瓶部分:
@app.route('/hermesmap', methods=['GET','POST'])
def hermesMap():
if request.method == "POST":
userName = request.form['username']
password = request.form['password']
server = request.form['server']
server = server[8:-1]
ascii_pass = base64.urlsafe_b64encode(password.encode("ASCII"))
sshpass = str(ascii_pass)
sshpass = sshpass.replace("b","")
sshpass = sshpass.replace("'","")
hermesMapGen.mapUpdate(userName,sshpass,server)
return render_template("hermesMap.html")
"hermesMapGen"正在生成一个带有插入参数的folium map,该函数需要每五分钟调用一次,因此该map将具有更新的数据。
这是HTML:
<!DOCTYPE html>
<html>
{%block content%}
<div class="custom-height-map" style="position:relative;padding-top:42.25%;border-style:solid;border-width:6px;">
<iframe src="{{url_for('static',filename='sfMarketMap.html')}}" id='hermesmap' frameborder="0" allowfullscreen
style="position:absolute;top:0;left:0;width:100%;height:100%;"></iframe>
</div>
<script>
window.setInterval(function() {
reloadIFrame()
}, 300000);
function reloadIFrame() {
console.log('reloading..');
document.getElementById('hermesmap').contentWindow.location.reload();
}
</script>
{%endblock%}
</html>
是否有一种方法,我可以运行生成地图的功能,而地图页面在浏览器中打开?
谢谢提前
更新:截至目前,我能够找到一个解决方案与javascript。我在初始表单页面中放入了以下代码,迫使它模拟"点击"。即使每隔x分钟,但我认为应该有更好/正确的方法来做这件事。
<script>
var btn = document.querySelector("[name='lookup']");
//console.log(btn);
setInterval(function(){
btn.click();
},200000);
//Handling of click event
btn.onclick=function(){
console.log('clicked');
}
</script>
你的方向是对的。
继续使用setInterval
,但这次对服务器进行fetch
调用并获取最新数据。
查看这里的fetch。