我正在尝试将两个项目返回到Flask中的html文件中,并且无法找到最佳方法。
Flask从另一个文件中拉出的两条操作线是:
# trader_db = Blotter(1000000, collection)
cash = self.cash + df['Value'].sum() # trader_db.cash
return df.to_html('templates/pnlstmt.html') # trader_db.pnl(collection)
使用此代码:
@app.route("/pl")
def show_pl():
cash = trader_db.cash
trader_db.pnl(collection)
return render_template('pnlstmt.html'), cash
我得到了预期的P& L
Symbol Position
AAPL 350.0
AMZN 1000.0
GOOG 350.0
但现金没有显示。
有没有办法让show_pl()显示两个对象?
我试图将现金变成一个DataFrame并连接但是却引发了错误。
答案 0 :(得分:0)
一般的想法是分离"逻辑"来自"演示"。使用python函数可以计算值。使用模板系统,您可以在一个可显示的html视图中构建它。
我写了一些可能对您有所帮助的简单示例:
首先,我们计算数据(我这里有一个存根)并将它们作为变量传递给模板上下文:
from flask import app, render_template
import pandas as pd
main = app.Flask("app")
@main.route('/pnl')
def pnl():
df = pd.DataFrame([["AAPL","AMZN","GOOG"], [350.0,1000.0,350.0]], index=["Symbol","Position"]).T
cash = 100000
# passing data to the template
return render_template("pnl.html", data=df, cash=cash)
main.run(port=8889)
其次,我们创建了"渲染"我们的数据转换成html。这是pnl.html
文件的内容:
<table>
{% for ind,row in data.iterrows() %}
<tr><td>{{ind}}</td><td>{{row["Symbol"]}}</td><td>{{row["Position"]}}</td></tr>
{% endfor %}
</table>
<h2>Total cash: {{ cash }}</h2>
这是一个完整的代码来启动和测试它。