Flask 입문 2: 데이터 프레임을 스타일시트로 멋지게 표시

환경



Mac, 로컬

세련된 스타일 시트를 집어 들고 그대로 적용 할 수 없다고 생각했지만 안돼.



h tp // w w. htm dc s sboo k. 이 m / e xt et al.


왜? 이 스타일 시트가 상정하는 구조 (예 : 아래 그림)


pd.DataFrame.to_html()에서 내뿜는 구조와 다르기 때문

to_html()로 토출되는 구조와 Jupyter처럼 표시할 수 있는 곳까지



매우 알기 쉬운 것이 있었다. 진짜로 여기에 모두 써 있기 때문에 코드 게재 등은 할애
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 50807744 / 아 ply-c s sc


덧붙여서 스타일 시트를 변경했는데 반영되지 않지? 라고 생각하면
127.0.0.1:5000/static/style.css
변경 사항을 확인할 수 있을 때까지 여러 번 로드한 다음 액세스하면 반영될 수 있음

위의 참고로 CSS를 다시 쓰고 조금 세련되게 만듭니다.



열심히 이런 느낌


app.py
from flask import Flask,render_template,url_for
import seaborn as sns
app = Flask(__name__)

@app.route('/')
def index():
    df = sns.load_dataset('iris')
    return render_template('index.html', 
                            table=(df
                                .head(15)
                                .to_html(classes="mystyle"))
                            )

if __name__ == "__main__":
    app.run()

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>mystyle</title>
    <link rel="stylesheet" 
        type="text/css"
        href="{{url_for('static', filename='style.css')}}">
    <style type="text/css">
        body {
                font-family: Arial, Verdana, sans-serif;
                font-size: 90%;
                color: #666;
                background-color: #f8f8f8;}
        </style>
</head>
<body>
        <h1>iris data table</h1>    
        {{table | safe}}
</body>
</html>

style.css
mystyle {
    border-spacing: 0px;
    border-top: 0px solid;
    border-left: 0px solid;
    border-right: 0px solid;
    border-bottom: 0px solid;
}

.mystyle th, td {
    border-spacing: 0px;
    padding: 5px;
    border-top: 1px solid #f1f8fe;
    border-bottom: 1px solid #cbd2d8;
    border-right: 1px solid #cbd2d8;
    margin: 0px;
}

.mystyle thead, th:first-child {
    background-color: #90b4d6;
    text-shadow: -1px -1px 1px #666666;
}

.mystyle thead th{
    color:white;
    text-align: center;
    border-bottom: 2px solid #547ca0;
    letter-spacing: 0.15em;
}
.mystyle th:first-child {
    color:white;
    text-align: right;
}

.mystyle td {
    text-align: right;
}

.mystyle tr:nth-child(even) {
    background: #E0E0E0;
}

.mystyle thead tr th:first-child {
    -webkit-border-top-left-radius: 5px;
    -moz-border-radius-topleft: 5px;
    border-top-left-radius: 5px;}

.mystyle thead tr th:last-child {
    -webkit-border-top-right-radius: 5px;
    -moz-border-radius-topright: 5px;
    border-top-right-radius: 5px;}    

※style sheet는 별로 이해하고 있지 않다. 낭비가 많다고 생각

좋은 웹페이지 즐겨찾기