Google App Engine「template編」

Google App Engineの学習中。昨日のguestbookをtemplateを使って書き直しました。MVCの分離は大切です。

テンプレートで使うHTML

同じディレクトリに「index.html」を作成

<html>
  <head>
    <title>guestbook</title>
  </head>
  <body>
    <h1>GUEST BOOK!!</h1>
    {% for greeting in greetings %}
      <strong>Name :</strong> {{greeting.author}}
      <pre>{{greeting.content}}</pre>
      <hr>
    {% endfor %}
    <form action="/sign" method="post">
      <div>NAME: <input type="text" name="author"></div>
      <div><textarea name="content" rows="5" cols="60"></textarea></div>
      <div><input type="submit" value="write"></div>
    </form>
  </body>
</html>

{%〜〜%}でコマンドが書けて{{〜〜}}で囲むと変数がそこに出力されます。JSPみたい。

プログラムの変更点

MainPageクラスだけ、以下のように変更しました。

class MainPage(webapp.RequestHandler):
  def get(self):
    greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date")
    template_values = {
      'greetings': greetings,
    }
    path = os.path.join(os.path.dirname(__file__),'index.html')
    self.response.out.write(template.render(path, template_values))

template_valuesにテンプレートで使用するオブジェクトを設定してtemplate.renderで出力。