Date: 2007-03-24
Tags: turbogears

kidのpy:extendsにはまる

たとえば

@expose(template="proj.templates.foo")
def index(self):
    return dict(master="proj.templates.master")

などとしてmasterという変数にtemplateのパスを渡す。それをkidがわで

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://purl.org/kid/ns#"
      py:extends="master">

と書くと、masterというnameは定義されていない!と怒られる。でも

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://purl.org/kid/ns#"
      py:attrs="{'foo':master}">

これは期待通りに動作する。つまりextendsの評価がindex関数から渡された変数の展開よりも先ということだろう。 ということで、index関数からextendsするテンプレートを渡しても、単純にextendsすることは出来ないということか。

ちなみに<html>タグの前だと${master}もNameErrorになる。<html>タグの後だとエラーにならない。

この辺の理由はkidcでkidをコンパイルしてpyファイルを生成するとわかる。わかるけど、どうすれば上記のextendsをうまくできるようになるかはまだよく分からない。。。