Pylons上のMakoでToscaWidgets使ってみる

もうなんだか組み合わせがえらいことになってきている。
ToscaWidgetsのtwformsはテンプレートエンジンにGenshi使ってるし。

まずはwsgiミドルウェアを設定する。
config/middleware.py

...

from toscawidgets.middleware import make_middleware
...


def make_app(global_conf, full_stack=True, **app_conf):
    ...

    app = make_middleware(app, global_conf, host_framework="pylons")

フォームを作る。

class UserFormFields(WidgetsList):
    name = forms.TextField("name")
    introduction = forms.TextArea("intoduction")

class UserForm(forms.TableForm):
    fields = UserFormFields()

コントローラー内では、テンプレート参照用にcへformを設定する。
(ん?formはグローバルに作った方が良いのだっただろうか?)
また、ToscaWidgets提供のrender_responseで、Responseを作成する。

from toscawidgets.mods.pylonshf import validate, render_response

class MainController(BaseController):

    def index(self):
        c.values = dict(name=u'aodag', introduction=u'Pythonプログラマー')
        c.form = UserForm()
        return render_response("/main_index.html")

テンプレートの中では、formにvaluesを渡して呼び出す。
0.9.6からはデフォルトでMakoが使われるようだ。

# -*- coding:utf-8 -*-
<?xml version="1.0"?>
<html>
  <body>
    ${c.form(c.values)}
  </body>
</html>

1行目の文字コード設定はPythonコード内に書くのと同じ。
書かないとマルチバイト文字でおこられるよ。