Pylons+memcacheDB...コントローラ設置と、テンプレート配置

PylonsRailsやDiangoみたいに /controller/method/id みたいなURLマッピングができる。すごい。ということで、電話帳は

  • /phone/view/1
  • /phone/edit/1
  • /phone/delete/1
  • /phone/create

みたいな感じでパスを設置する。といっても、Pylonsのコントローラはデフォルトの状態で上記のように解釈するらしいので特に難しい設定があるわけではない。PhoneBookディレクトリから以下を実行。

$ paster controller phone
Creating /home/masayang/Docs/Python/Pylon/pylons-mdb/PhoneBook/phonebook/controllers/phone.py
Creating /home/masayang/Docs/Python/Pylon/pylons-mdb/PhoneBook/phonebook/tests/functional/test_phone.py

生成されるcontrollers/phone.py中にあるindex()メソッドは不要なので消しておく。

コントローラの中でHTML文を書くのはものすご〜く1990年代風味なので、当然テンプレートを使う。プロジェクト設置時にデフォルト選択されていたmako。まずはディレクトリ配置を以下のようにする。

  • phone/templates/base
  • phone/templates/derived
  • phone/templates/derived/error
  • phone/templates/components

次に、phone/templates/base/index.htmlを作成

## -*- coding: utf-8 -*-

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>${self.title()}</title>
    ${self.head()}
</head>
<body>
    ${self.header()}
    ${self.tabs()}
    ${self.menu()}
    ${self.heading()}
    ${self.breadcrumbs()}
    ${next.body()}
    ${self.footer()}
</body>
</html>

<%def name="title()">PhoneBook</%def>
<%def name="head()"></%def>
<%def name="header()"><a name="top"></a></%def>
<%def name="tabs()"></%def>
<%def name="menu()"></%def>
<%def name="heading()"><h1>${c.heading or 'No Title'}</h1></%def>
<%def name="breadcrumbs()"></%def>
<%def name="footer()"><p><a href="#top">Top ^</a></p></%def>

次がphone/templates/derived/phone/view.html

<%inherit file="/base/index.html"/>
${c.content}

そして、phone/controllers/phone.pyを編集

class PhoneController(BaseController):

    def view(self, id):
        c.title = 'Phonebook'
        c.heading = 'Phonebook'
        c.content = "ID is %s" % id
        return render('/derived/phone/view.html')

http://10.10.10.147:5000/phone/view/2にアクセス

/phone/view/2のidである「2」がテンプレートに表示されているだけ。まだデータベースは使われていない。

Gitコミット先