質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

解決済

関数を表示させるには

jaogjig
jaogjig

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1回答

0評価

1クリップ

355閲覧

投稿2021/12/18 16:03

編集2021/12/18 16:28

前提・実現したいこと

pythonで財務諸表を自動で分析できるようなシステムを作っています。
flaskでhtmlに表示させるところで{{ fi }}のところが表示させません

発生している問題・エラーメッセージ

発生している問題は{{ fi }}のところが表示されないことです。

該当のソースコード

app

.py @app.route("/tab",methods=["GET"]) def cash_loan_calculation(): cash=9407848 loan=10584455 difference=cash-loan a= cash/difference return render_template('table.html',fi=a)

table

.html <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th>クレスコ株式会社</th> <th>2020年3月31日前連結会計年度</th> <th>2021年3月31日前連結会計年度</th> </tr> </thead> <tbody> <tr> <th>現金及び預金</th> <td>9407848</td> <h2>バランスは..{{ fi }}</h2> <td>11039932</td> </tr>

試したこと

以下の記事を参考にしました。
https://qiita.com/adgjmptw0/items/4a7da6192c1c523b8079

補足情報(FW/ツールのバージョンなど)

ファイル,フォルダ,ディレクトリ構造
pycache
|-app.cpython-39.pyc
images
|-2.png
static
|-design.css
templates
|-howto.html
|-index.html
|-searched.html
|-table.html
|-Registar.html
|-top.html
app.py
date.py
stock.py 
クレスコ財務データ(自動保存済み).csv
FW:flask
言語:Python3.9.7
pandasダウンロード済み
ファイル:
templates
-howto.html

text

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="stylesheets/design.css"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </head> <body> <h3>説明</h3> <p>kajoijdasij</p> </body>

 -index.html

indextext

<body> <nav class="navbar navbar-light bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="/">Value Searcher</a> <form class="d-flex" action="/howto" method="GET"> <a type="button" class="btn btn-primary" href="/howto">使い方</a> </form> <form class="d-flex" action="/login" method="GET"> <a type="button" class="btn btn-primary" href="/registar">ログイン</a> </form> <form class="d-flex" method="POST"> <input class="form-control me-2" type="search" placeholder="ソニー,2143" aria-label="Search" name=num > <button class="btn btn-outline-success" type="submit">Search</button> </form> </div> </nav> <img src="/static/images/22272499.png"height="1040" width="1980"> <a class="btn btn-primary" href="/searched" role="button">問い合わせ</a> <a class="btn btn-primary" href="/tab" role="button">利用規約</a> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js" integrity="sha384-q2kxQ16AaE6UbzuKqyBE9/u/KzioAlnx2maXQHiDX9d4/zp8Ok3f+M7DPm+Ib6IU" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.min.js" integrity="sha384-pQQkAEnwaBkjpqZ8RU1fF1AKtTcHJwFl3pblpTlHXybJjHpMYo79HY3hIi4NKxyj" crossorigin="anonymous"></script> </body> </html>

 searched.html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="stylesheets/design.css"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </head> <body> <p>表示中</p> </body>

 table.html

templateslogin
-register.html

text

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Registar</title> <link rel="stylesheet" type="text/css" href="stylesheets/design.css"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> </head> <body> <h1>新規登録</h1> <a href="/top">ログイン画面に戻る</a> {% if status == "exist_user" %} <p>そのユーザは既に登録されています。</p> {% endif %} <form action="/registar" method="post"> <input type="text" name="user_name" placeholder="user name"> <input type="password" name="password" placeholder="password"> <input type="submit" value="新規登録"> </form> </body> </html>

-top.html

text

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h1>ログイン</h1> {% if status == "user_notfound" %} <p>ユーザが見つかりません。新規登録しましょう。</p> {% elif status == "wrong_password" %} <p>パスワードが間違っています。</p> {% elif status == "logout" %} <p>ログアウトが完了しました。</p> {% endif %} <form action="/login" method="post"> <input type="text" name="user_name" placeholder="user name"> <input type="password" name="password" placeholder="password"> <input type="submit" value="Login"> </form> <a href="/newcomer">新規登録はこちら</a> </body> </html>

app.py

apptext

from flask import Flask,render_template,request import pandas as pd app = Flask(__name__) @app.route('/',methods=["GET", "POST"]) def index(): return render_template('index.html') @app.route('/searched',methods=["GET", "POST"]) def searched(): if request.method=='GET': return render_template('searched.html') @app.route("/howto",methods=["GET"]) def howto(): return render_template("howto.html") @app.route("/tab",methods=["GET"]) def tab(): return render_template("table.html") @app.route("/searched/table") def table(): col_names = ['c{}'.format(i) for i in range(2)] df=pd.read_csv('クレスコ財務データ(自動保存済み).csv',encoding='utf-8',names = col_names ) df.index=[ 'クレスコ株式会社' '現金及び預金' ,'受取手形及び売掛金' ,'電子記録債権' ,'有価証券' ,'金銭の信託' ,'商品及び製品' ,'仕掛品' ,'貯蔵品' ,'前払費用' ,'その他' ,'貸倒引当金' ,'流動資産合計' ,'固定資産' ,'有形固定資産' , '建物' ,'減価償却累計額' , '建物(純額)' , '工具、器具及び備品' , '減価償却累計額' , '工具、器具及び備品(純額)' , '土地' , 'リース資産' , '減価償却累計額' ,'リース資産(純額)' , '有形固定資産合計' , '無形固定資産' , 'のれん' , 'ソフトウエア' , 'その他' , '無形固定資産合計' , '投資その他の資産' , '投資有価証券' , '敷金及び保証金' , '保険積立金' ,'繰延税金資産' , 'その他' ,'貸倒引当金' ,'投資その他の資産合計' , '固定資産合計' ,'資産合計' ,'買掛金' ,'短期借入金' ,'1年内返済予定の長期借入金' ,'リース債務' ,'未払金' , '未払法人税等' ,'未払事業所税' ,'未払消費税等' ,'賞与引当金' ,'役員賞与引当金' ,'受注損失引当金' ,'その他' ,'流動負債合計' ,'長期借入金' ,'長期未払金' ,'リース債務' ,'退職給付に係る負債' ,'資産除去債務' ,'繰延税金負債' ,'固定負債合計' ,'負債合計' ,'資本金' ,'資本剰余金' ,'利益剰余金' ,'自己株式' ,'株主資本合計' ,'その他有価証券評価差額金' ,'為替換算調整勘定' ,'退職給付に係る調整累計額' ,'その他の包括利益累計額合計' ,'新株予約権' ,'純資産合計' ,'売上高' ,'売上原価' ,'売上総利益' ,'販売費及び一般管理費' ,'広告宣伝費' ,'役員報酬及び給料手当' ,'賞与' ,'賞与引当金繰入額' ,'役員賞与引当金繰入額' ,'退職給付費用' ,'法定福利費' ,'採用費' ,'交際費' ,'地代家賃' ,'消耗品費' ,'のれん償却額' ,'事業税' ,'貸倒引当金繰入額' ,'その他' ,'販売費及び一般管理費合計' ,'営業外収益' ,'受取利息' ,'受取配当金' ,'有価証券売却益' ,'デリバティブ評価益' ,'助成金収入' ,'持分法による投資利益' ,'その他' ,'営業外収益合計' ,'支払利息' ,'有価証券評価損' ,'投資顧問料' ,'デリバティブ評価損' ,'自己株式取得費用' ,'新株予約権発行費' ,'寄付金' ,'その他' ,'営業外費用合計' ,'小計0' ,'税金等調整前当期純利益' ,'減価償却費' ,'のれん償却額' ,'減損損失' ,'貸倒引当金の増減額(△は減少)' ,'賞与引当金の増減額(△は減少)' ,'役員賞与引当金の増減額(△は減少)' ,'受注損失引当金の増減額(△は減少)' ,'役員退職慰労引当金の増減額(△は減少)' ,'退職給付に係る負債の増減額(△は減少)' ,'受取利息及び受取配当金' ,'支払利息' ,'有価証券売却損益(△は益)' ,'デリバティブ評価損益(△は益)' ,'持分法による投資損益(△は益)' ,'固定資産除却損' ,'投資有価証券評価損益(△は益)' ,'投資有価証券売却損益(△は益)' ,'投資有価証券償還損益(△は益)' ,'売上債権の増減額(△は増加)' ,'たな卸資産の増減額(△は増加)' ,'仕入債務の増減額(△は減少)' ,'未払金の増減額(△は減少)' ,'長期未払金の増減額(△は減少)' ,'未払消費税等の増減額(△は減少)' ,'その他' ,'小計' ,'利息及び配当金の受取額' ,'補償金の受取額' ,'利息の支払額' ,'法人税等の支払額' ,'営業活動によるキャッシュ・フロー ' ,'定期預金の預入による支出' ,'有価証券の取得による支出' ,'有価証券の売却による収入' ,'有形固定資産の取得による支出' ,'無形固定資産の取得による支出' ,'投資有価証券の取得による支出' ,'投資有価証券の売却による収入' ,'投資有価証券の償還による収入' ,'連結の範囲の変更を伴う子会社株式の取得による支出' ,'関係会社株式の取得による支出' ,'保険積立金の解約による収入' ,'その他' ,'投資活動によるキャッシュ・フロー' ,'短期借入金の純増減額(△は減少)' ,'長期借入れによる収入' ,'長期借入金の返済による支出' ,'リース債務の返済による支出' ,'配当金の支払額' ,'自己株式の取得による支出' ,'新株予約権の行使による自己株式の処分による収入' ,'その他' ,'財務活動によるキャッシュ・フロー' ,'現金及び現金同等物の増減額(△は減少)' ,'現金及び現金同等物の期首残高' ,'現金及び現金同等物の期末残高'] pd.set_option('display.max_rows', 200) pd.set_option('display.max_columns', 3) tle=df.to_html("searched.html") return render_template("searched.html",tle=tle) if __name__ == "__main__": #最後に記述する app.run(debug=True)

date.py 

text

from flask import Flask,render_template,request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) @app.route("/login",methods=["GET"]) def login(): return render_template("login.html") if __name__ == "__main__": #最後に記述する app.run(debug=True)

stock.py

クレスコ財務データ(自動保存済み).csv

text

クレスコ株式会社 2020年3月31日前連結会計年度 2021年3月31日前連結会計年度 現金及び預金 9407848 11039932 受取手形及び売掛金 7369657 7855304 電子記録債権 20902 15608 有価証券 564629 459292 金銭の信託 50946 64146 商品及び製品 26879 37315 仕掛品 258,504 156,750 貯蔵品 1582 1655 前払費用 374519 343748 その他 70835 106008 貸倒引当金 △1,995 ― 流動資産合計 18144311 20079762 固定資産 有形固定資産 建物 700994 733255 文字制限のためここまで

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

takutakuya

2021/12/18 16:12

@app.route("/tab",methods=["GET"]) と @app.route("/tab") がありますけど、これは合ってますか?
jaogjig

2021/12/18 16:30

返信ありがとうございます。 自分のコードを見たらどちらとも@app.route("/tab",methods=["GET"])でした。
takutakuya

2021/12/18 16:35

/tabへアクセスした時にtab()のほうが実行されてるのでfiが反映されてない、ということはないでしょうか?
jaogjig

2021/12/18 16:39

その場合、/tab/<何かしら>みたいな感じでやった方がいいということですか
Supernove

2021/12/18 16:43

cash_loan_calculation()関数とtab()関数がどちらも/tabでルーティングされていますが、どっちが正しいですか?
takutakuya

2021/12/18 16:47

tab()の中でcash_loan_calculation()使って、tabの方でrender_template('table.html',fi=a)と書くとか、色々方法はあると思います。 まずは/tabにアクセスした時に何が実行されているか、確認されたほうが良いと思います。
jaogjig

2021/12/18 17:05

/tabにアクセスしたときはtableは表示されますが、{{ fi }}の部分だけ表示されません。
takutakuya

2021/12/18 17:10

どっちも'table.html'を返してますからね。 tab()のほうにfi='fi'を追加して確認してみてはどうでしょうか?
jaogjig

2021/12/18 17:13

表示されました。ありがとうございます。ずっと解決できなかったのですごくうれしいです。
jaogjig

2021/12/18 17:14

こちらが修正後です。 @app.route("/tab",methods=["GET"]) def tab(): cash_loan_calculation() cash=9407848 loan=10584455 difference=cash-loan a= cash/difference return render_template("table.html",fi=a)

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。