Google App Engine 一人勉強会 第二回 jinja デビューとデバッグ

目標とサンプルとソース置き場

目標は Google App Engine 上で動くアプリを作り上げることです。

サンプル

ソース

バージョン

フォルダ構成

tutorial/
  werkzeug/ ... ln -s ../../src/werkzeug-main/werkzeug .
  jinja2/ ... ln -s ../../src/jinja2-main/jinja2 .
  debug/
  templates/
    hello.html
    about.html
    index.html
  app.yaml
  index.yaml
  app.py
  main.py
  urls.py
  views.py
  models.py

第二回 jinja デビューとデバッグ

今回は Jinja2 のテンプレート機能を使っていままで素で書いていた HTML をテンプレート化してみます。

テンプレートを置く場所として templates というフォルダを作成し、views.py をテンプレートを使用するように書き換えてみます。

views.py

from werkzeug import Response, escape
from jinja2 import Template, Environment, FileSystemLoader

env = Environment(
    loader=FileSystemLoader('templates', encoding='utf8'),
    autoescape=True,
  )

def index(reqest):
  tmpl = env.get_template('index.html')
  return Response(tmpl.render(), mimetype='text/html')

def hello(request):
  name = request.form.get('name') or 'Nobody'
  tmpl = env.get_template('hello.html')
  d = {'name': name,}
  return Response(tmpl.render(d), mimetype='text/html')

def about(request):
  tmpl = env.get_template('about.html')
  return Response(tmpl.render(), mimetype='text/html')

実行してみます。Mac の GoogleAppEngineLauncher は便利。

デバッガにこれを仕込んでおくと便利です(コンソール動かないけど...動いてると勘違いしてた)

名前思いっきり出てるな ... 。
debug
debug posted by (C)voluntas

テンプレートファイルが存在しないと怒られました。
なので、templates フォルダに templates を作ってください。

index.html

<h1>Index Page</h1>
<p>What's your name?</p>
<form action="hello" method="post">
  <input type="text" name="name" value="My Name">
  <input type="submit" value="Greet Me!">
</form>

hello.html

<h1>Hello {{ name }}!</h1>

保存して実行すれば無事動くはずです。

jinja2 はかなり高機能なので追うのが大変です:-P

次回はもっと本格的なアプリを作って行けたらいいなと思います。