我使用此 flask 代码手动显示sqlalchemy数据:
@portfolioPath.route('/portfolio', methods=['GET','POST'])
def portfolio():
if request.method == 'POST':
all_data = HoldingsTable.query.all()
return render_template("portfolio.html", all_data_html = all_data)
在此显示查询数据的动态html表中:
<!-- Equity Holdings Overview Table -->
<table class="table table-hover table-striped table-sm">
<tr>
<th>ID</th>
<th>Trade Date</th>
<th>Name</th>
<th>Symbol</th>
<th>Shares</th>
<th>Purchase Price</th>
</tr>
{% for row in all_data_html %}
<tr>
<td>{{row.id}}</td>
<td>{{row.date_purchase}}</td>
<td>{{row.name}}</td>
<td>{{row.ticker}}</td>
<td>{{row.shares}}</td>
<td> $ {{row.price_purchase}}</td>
</tr>
{% endfor %}
</table>
使用此刷新按钮手动显示或刷新数据表,但不便之处在于它会重新加载整个页面:
<form action="{{url_for('core.portfolio')}}" method="POST">
<div class="form-group">
<div class="row align-items-start">
<div class="col-md-2 col align-self-end">
<button class="btn btn-primary float-end" type="submit" style="margin:5px;">1. Refresh!</button>
</div>
</div>
</div>
</form>
因此,我尝试添加ajax/jquery来加载表中的数据,而无需每次重新加载整个表。因此,我在相同的文件中使用了这段小代码进行了测试:
<h3>What's 1 + 1?</h3>
<form>
<input type=text size=5 name=proglang>
<a href=# id=process_input><button class='btn btn-default'>Submit</button></a>
</form>
<p id=result></p>
当然,python函数如下所示:
@portfolioPath.route('/background_process')
def background_process():
try:
lang = request.args.get('proglang', 0, type=str)
if lang.lower() == '2':
return jsonify(result='You are wise')
else:
return jsonify(result='Really?')
except Exception as e:
return str(e)
jquery脚本如下所示:
<script type=text/javascript>
$(function() {
$('a#process_input').bind('click', function() {
$.getJSON('/background_process', {
proglang: $('input[name="proglang"]').val(),
}, function(data) {
$("#result").text(data.result);
});
return false;
});
});
</script>
因此,我尝试更改脚本以仅重新加载表:
<script type=text/javascript>
$(function() {
$('a#wallet_refresh_id').bind('click', function() {
$.getJSON('/wallet_refresh', function(all_data_html) {
$("#table").html(all_data_html);
});
return false;
});
});
</script>
对于连接的 flask 后端部件:
@portfolioPath.route('/wallet_refresh', methods=['POST'])
def wallet_refresh():
if request.method == "POST":
all_data = HoldingsTable.query.all()
return render_template("portfolio.html",
all_data_html = all_data
)
return render_template("portfolio.html")
和一个新的提交按钮:
<form id="wallet_table_form">
<h3>REFRESH THE DATABASE</h3>
<form>
<a href=wallet_refresh id=wallet_refresh_id><button class='btn btn-default'>Submit</button></a>
</form>
但很明显,我把事情搞混了,因为什么都没发生,有什么问题吗?
1条答案
按热度按时间j2datikz1#
你必须做太多的修复才能让它工作。
在html中,如果使用ajax,则不需要表单标记。
您不需要使用锚定标记。您可以使用按钮并在其上使用单击事件。
我不知道哪个元素有id
table
. 为了更新您需要的数据,您需要为表中的tr标记提供id。并使用js对其进行模拟。在javascript中,现在不需要返回false,可以使用#wallet_refresh_id并使用for循环。
在python代码中,应该使用
get
方法而不是post
在ajax中使用get时。您只需要返回数据,而不需要返回呈现的模板。您需要使用json.dumps。