2019年1月3日木曜日

flaskのメモ

■cssを入れる->static

templatesディレクトリと同じところにstaticディレクトリを作って、cssファイルを入れます。

例えばこんな感じです。

├── app.py
├── css
│   ├── font-awesome.min.css
│   └── styles.css
├── templates
│   └── form.html
└── test.html


headの中で指定します。

<head>
  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>


http://flask.pocoo.org/docs/dev/tutorial/static/

■レスポンシブ

FLASKに限りませんが
viewport を使うといい感じにしてくれます。
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
■render_templateで変数を全て渡す

# app.py
def test():
    n1 = "test"
    n2 = "this is a test"
    return render_template("confirm.html", **locals())


とすると、confirm.htmlにapp.py内の関数test内で定義されたlocal変数が全てjinjaテンプレートに受け渡されます。
上記の例では
return render_template("confirm.html", n1=n1, n2=n2)
と同じです。

■render_template
・変数を渡して、使わなくてもエラーにはならない
・渡されていない変数を{{ }} でhtml側で呼んでもエラーにはならず空白になるだけ


■formの値は文字列として渡される

<input type="checkbox" name="test" value=1>

というチェックボックスをPOSTで渡したとして、

request.form['test'] == 1

False

request.form['test'] == "1"

True

となります。valueをintで渡したつもりでも、strになるということですね。

<input type="checkbox" name="test" value="1">

最初から"1"とやっていたほうが誤解がなくて良いかもしれません。

■(htmlの話)

fontの指定はtd毎にやること

NG
<font size="+1">
<td>あああ</td>
<td>いいい</td>
</font>

OK
<td><font size="+1">あああ</font></td>
<td><font size="+1">いいい</font></td>

■flaskでprint文をコンソールに出力

printデバッグ用。

import sys

print('This is error output', file=sys.stderr)
print('This is standard output', file=sys.stdout)

こうすると、errorの方がコンソールに出力されるはずです。設定によるかもしれませんが。
https://stackoverflow.com/questions/44405708/flask-doesnt-print-to-console/44410730

■Flaskのrender_template

基本かもしれません。

from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

render_templateで変数(ここではname)を送ることができます。テンプレートがhello.htmlで、urlにnameが加えられた状態になります。nameはデフォルトではNoneになっています。

@app.routeは1つのサイトに対して複数設定することができます。このURLが呼ばれたら下にあるdefを実行する、という意味になります。






0 件のコメント:

コメントを投稿