我正在使用flask并且需要在HTML页面上显示一个python变量&无需刷新即可实时更新。我已经搜索过但无法进行搜索。为了找到一个解决方案,我在python脚本中创建了一个简单的方法,一个应该在页面中动态更新的时间变量。这是我的代码:
<script>
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
(function(){
$.getJSON(
$SCRIPT_ROOT+"/get_data",
function(data) {
$("#testt").text(data.time);
}
setInterval(arguments.callee, 1000);
);
});
</script>
<span id="testt">?</span>
&#13;
import datetime
from flask.app import Flask
from flask.json import jsonify
app=Flask(__name__)
@app.route('/get_data', methods=['GET'])
def get_data():
return jsonify(time=str(datetime.datetime.now().time()))
if __name__=="__main__":
app.run(debug = True, host='0.0.0.0')
&#13;
编辑:在我的解决方案中,时间仅在刷新页面时更新。希望它实时更新。
答案 0 :(得分:0)
您可以使用websocket以dinamically方式更新您的页面。 有一个名为Socket.Io的项目,由Flask实现,用于处理websockets。
您可以在此处阅读文档:https://flask-socketio.readthedocs.io/en/latest/并观看一个快速示例,了解此处的概念:https://www.youtube.com/watch?v=RdSrkkrj3l4
答案 1 :(得分:0)
你没有准确指出你的问题是什么(&#34;没有工作&#34;没有真正的帮助)所以这可能是一个疯狂猜测的答案最好的。
首先,你定义了一个匿名函数,但从不调用它,所以它被执行的几率严格等于零。如果你希望在你的dom准备就绪时执行该功能(这是理所当然的事情,因为它引用了在函数之后定义的dom的元素,你可以使用$(document).ready(yourfunc)
,即:
$(document).ready(function(){
$.getJSON(
$SCRIPT_ROOT+"/get_data",
function(data) {
$("#testt").text(data.time);
}
setInterval(arguments.callee, 1000);
);
});
此外,你当然不想从函数本身调用window.setInterval()
(每次调用函数时会再次调用它),所以它应该是这样的: / p>
$(document).ready(function(){
function _update_time() {
$.getJSON(
$SCRIPT_ROOT+"/get_data",
function(data) {
$("#testt").text(data.time);
});
}
// do a first call at load time
_update_time();
// then repeat it every second
window.setInterval(_update_time, 1000);
);
});
另外,我不是Jinja2专家(因为它是Flask,从我看来它是假设Jinja2的模板),但是这个:
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
对我来说似乎没有问题。
首先,您希望$SCRIPT_ROOT
成为字符串,因此您必须引用它:
$SCRIPT_ROOT = "{{ request.script_root|tojson|safe }}";
然后我在这里看不到tojson
和safe
过滤器的意思 - safe
告诉模板引擎不要html转义你的变量但是一个url很少包含html标记,jsonifying一个简单的字符串对我来说没有意义。
再一次,它充满了猜测并且可能完全错误。如果你想要更好的答案,你将不得不做你的功课并发布一些更多的信息,包括: