2017-11-02 5 views
-1

Flaskのhtmlファイルに2つのアイテムを返そうとしていますが、これを実行する最善の方法を見つけるのに問題があります。フラスコを別のファイルにから引いているFlaskの複数のオブジェクトを返す

2本の動作線である:このコードで

          # 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 

Iは、予想されるP & L

Symbol Position 
AAPL 350.0 
AMZN 1000.0 
GOOG 350.0 

を得ますしかし現金は表示されません。

両方のオブジェクトを表示するshow_pl()を得る方法はありますか?

現金をDataFrameにして連結しようとしましたが、エラーが発生しました。

+0

あなたは間違ったやり方をしています:)データをディスク上のhtmlファイルにレンダリングし、それをテンプレートとして使用するのは悪い習慣です。あなたは、文字列変数としてdataframeのhtml表現を保持し、任意の内容をプレーンhtmlとして、またはより良い方法で、Jinja syntaxisで実際のテンプレートファイルを使用することができます。 2番目のオプションでは、変数を 'render_template'関数に渡してテンプレート内で使用します。 –

+0

2番目のケースのためのナイス・チュートリアル:https://damyanon.net/post/flask-series-templating/ –

+0

私はフラスコのノブです、正しい方向に向けることができますか? -editありがとう! –

答えて

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に「レンダリング」するテンプレートを作成します。

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

これが起動し、それをテストするための完全なコードは次のとおりです。これはpnl.htmlファイルの内容です。

関連する問題