在Flask中返回多个对象

时间:2017-11-02 01:33:15

标签: python pandas flask flask-sqlalchemy

我正在尝试将两个项目返回到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并连接但是却引发了错误。

1 个答案:

答案 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>

这是一个完整的代码来启动和测试它。