メソッドが公開されると、テンプレートで使用されるdictを返すことができます。
class RootController(TGController):
@expose('myapp.templates.index')
def index(self):
self.mykey = "foo"
self.mymenu = ["item1", "item2", "item3"]
self.selected = "item1"
return dict( mykey=self.mykey, mymenu=self.mymenu, selected=self.selected)
このコードは正常に機能します。次に、メニューボイラープレートを次のようなデコレータにカプセル化します。
class RootController(TGController):
@expose('myapp.templates.index')
@menu()
def index(self):
self.mykey = "foo"
self.mymenu = ["item1", "item2", "item3"]
self.selected = "item1"
return dict( mykey=self.mykey)
しかし、このメニューデコレータの書き方がわかりません。私が使用する場合:
def before_render_cb(remainder, params, output):
return output.update( dict(mymenu=["item1", "item2", "item3"], selected="item1"))
class RootController(TGController):
@expose('myapp.templates.index')
@before_render(before_render_cb)
def index(self):
self.mykey = "foo"
self.mymenu = ["item1", "item2", "item3"]
self.selected = "item1"
return dict( mykey=self.mykey)
mymenuが追加され、dictに選択されますが、コントローラーのインスタンス属性(self.mymenuおよびself.selected)にアクセスできません。
デコレータを使用する場合:
class menus(object):
def __call__(self, func):
deco = Decoration.get_decoration(func)
return func
デコレーションにはアクセスできますが、露出オブジェクトにもコントローラーにもアクセスできません。
これどうやってするの?