acokikoy's notes

{"勉強中":"Python","注目":"Shopify","LOVE♡":["ABARTH595","TA-GG9","Ukulele","Movable Type","ガーナ ミルクチョコレート"]} なWebディレクター

CheatSheet》Flask (1)

Flask, jinja2チートシート。毎度0から思い出し思い出しでアホだから、コピペして使う用。

基本のひな形:: app.py

固定URL

from flask import Flask, render_template

app = Flask(__name__)

# http://127.0.0.1:5000/
@app.route('/')
def index():
    # ./templates/index.html を呼ぶ
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)

debug=True にすると

  • ソース変更したら自動リロードされる
  • エラー発生時、ブラウザ上にエラー情報を表示して、デバッグ機能が使える。
    • デバッグにはPINを入力する。PINはコンソール側に* Debugger PIN: 175-669-921 のように出るのでそれを入れる。

動的URL、パラメータ受け渡し

class UserInfo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# http://127.0.0.1:5000/user/TARO/25
@app.route('/home/<string:name>/<int:age>')
def home(name, age):
    login_user = UserInfo(name, age)

    return render_template('home.html', login_user=login_user, is_login=True)

基本のひな形:: jinja2テンプレ側

templates/home.html

{% extends "base.html" %}
{% block title %}Home{% endblock %}
{%block content %}
    {% if is_login %}
    <p>{{ "%s(%s歳)"|format(login_user.name,login_user.age) }}さんがログインしました。</p>
    {% else %}
    <p>ログインしていません。</p>
    {% endif %}
{% endblock %}

templates/base.html

<!DOCTYPE html>
<html>
<head lang="ja">
   <meta charset="utf-8">
   <title>{% block title %}初期値だほにゃらら{% endblock %}</title>
   <link rel="stylesheet" href="/common/style.css">
</head>
<body>
    {%block content %}
    {% endblock %}  
</body>
<!-- コメント文 -->
{# templates/userlist.html #}
<!-- Extend元の値を使う -->
{% block title %}Home {{ super() }}{% endblock %}
# こうなる→ <title>Home初期値だほにゃらら</title>
<!-- ループ -->
{% for user in users %}
    {{ user.name }}さん - {{ user.age }}歳
{% endfor %}
<!-- if文 -->
{% if 'Hanako' in users %}
    <p>Hanako さんはメンバーです</p>
{% else %}
    <p>Hanako さんはメンバーではありません</p>
{% endif %}
<!-- 組込フィルター, パイプ -->
#users_name = ['Taro', 'Jiro', 'Sabro', 'Hanako']
アルファベット順の先頭の人は {{ users_name | sort|first }} 、
ランダムなひとりは{{ users_name | random }}です。

リンク