buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

Python Bottle 画面とコードを分ける

Python フレームワークBottleを使ってみるではpyファイルにhtmlタグを記述していたので htmlファイルを作成して読み込むようにする

htmlタグが記述されたHelloWorld.py

from bottle import route, run, template  

@route('/hello/<name>')  
def index(name):  
    return template('<b>Hello {{name}}</b>!', name=name)  

run(host='localhost', port=8080)

return template()の引数にhtmlファイルを記述してみる

まず思いついた方法でやってみる!

pyファイルと同じ階層にhtmlファイルを作成

f:id:butorisa:20201020150926p:plain

HelloWorld.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>HelloWorld</title>
  </head>
  <body>
    Hello {{name}}!
  </body>
</html>

pythonコードのreturn template()部分の第一引数をhtmlファイルのパスにする

HelloWorld.py

from bottle import route, run, template

@route('/hello/<name>')
def index(name):

    return template('./HelloWorld.html', name=name)

run(host='localhost', port=8080)

え!これで表示された!!

ターミナルからBottleサーバを起動してlocalhost:8080/hello/worldにアクセス

f:id:butorisa:20201020150956p:plain

htmlファイルで<title>HelloWorld</title>と書いているから Safariのタブにも「HelloWorld」と表示されている(html作成前はタブにはアドレスが出ていた)

キャッシュが残っているとかでは…?

こんなにあっさりhtmlファイルが読み込みできてしまうとは思わなかったので、検証してみる pythonコードを存在しないhtmlファイル名にしてサーバを再起動 return template('./Hello-World.html', name=name)

f:id:butorisa:20201020151016p:plain

ちゃんとエラーになった!!エラーメッセージも「ファイルが見つかりません」だ!

Bottleすごいよ!

パスを記述してhtmlファイルを読み込むだけでもすごいけれど、{{name}}を置き換えて表示できるから本当にすごい!!(フレームワークだったら当たり前??) プレーンなhtmlファイルを画面表示する前に「何かのテンプレート」にしてくれてるんだ!きっと {{ }}で置き換える項目が多くなると、引数が増えてコードが読みにくくなっちゃうな…