gpt4 book ai didi

javascript - 使用 render_template 重新渲染不起作用

转载 作者:行者123 更新时间:2023-12-02 21:18:18 25 4
gpt4 key购买 nike

Flask 不会使用新变量重新渲染模板页面。

Flask 代码 (app.py):

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)


@app.route("/",methods = ['GET', 'POST'])
@app.route("/<value>",methods = ['GET', 'POST'])
def index(value=1):
print(value)
return render_template('home.html',number=value)

@app.route("/next",methods = ['GET', 'POST'])
def next():
if request.method == 'POST':
last_num = list(dict(request.form).keys())[0]
last_num = int(last_num)
return redirect(url_for("index",value=last_num+1))

if __name__ == '__main__':
app.run()

HTML 页面 (home.html):

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(function() {
$('#submit').click(function() {
$.ajax({
url: '/next',
data: String(Number(document.getElementById("number").textContent)),
type: 'POST',
success: function(response) {
console.log("Awesome");
},
error: function(error) {
console.log(error);
}
});
});
});
</script>
</head>
<body>

<div id="number">
{{number}}
</div>
<button type="button" id="submit">Next</button>

</body>
</html>

HTML 页面中的(最后一个)数字很好地到达了 Flask 代码,并且 index 函数也获得了递增的值。但 HTML 页面不会使用新的 number 变量重新加载。

最佳答案

有几件事。

首先,您可以将 flask 变量直接插入到您的JavaScript。它可能会导致您的编辑器出现错误(不是在本例中),但是当页面呈现时,它会起作用适本地。 (即数据:“{{ number|safe }}”)

其次,您没有重定向客户端。您正在从 API 调用返回重定向,但您没有遵循它。仅当您将 /next 端点呈现为页面时,该函数才有效。您应该返回您希望客户端导航到的 URL。您可以在 JavaScript 中通过多种方式设置页面 URL。如果您只想重新加载页面,请将 location.reload(true) 放入成功处理程序中。 (通过将forceGet设置为true,您将阻止浏览器从缓存中重新加载,以便服务器实际上更新页面上的变量)。请注意,如果您这样做,您将需要在后端全局存储该变量,否则它不会更新。这可能是您现在的问题(如果您每次都手动重新加载页面):您的变量仅通过重定向传递,而您又没有遵循和呈现。

最后,我想说有更好的方法来完成你想要做的事情。也许将变量存储在本地并远程更新到数据库中。无需为如此琐碎的事情重新加载页面。

希望这有帮助。如果我误解了您的问题或犯了错误,请告诉我。

关于javascript - 使用 render_template 重新渲染不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60911565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com