次のような mako テンプレートの小さな階層があります。
base.mako
<h1>${self.view()}</h1>
${listactions(self.mainactions)}
${self.body()}
<%def name="listactions(actions)">
<ul>
% for action in actions:
<li>${action}</li>
% endfor
</ul>
</%def>
clientbase.mako
<%inherit file="base.mako"/>
<%def name="view()">Clients</%def>
<%
mainactions = [request.route_url('clientsnew')]
%>
clientindex.mako
<%inherit file="clientsbase.mako"/>
This is the index
問題は、clientsindex.mako をレンダリングするクライアント インデックス ビューにアクセスしようとすると、エラーAttributeError: Namespace 'self:/base.mako' has no member 'mainactions' が表示されることです。
これを行う適切な方法は何ですか?私は mako のドキュメントを調べましたが、これまでに見つけたのは、モジュール レベルの python ブロックを使用して mainactions を宣言し、次に base.mako で self.attr.mainactions を実行できることです。問題は、このブロック内にあり、リクエスト オブジェクトにアクセスできません。
別の質問があると思います: 私の場合、関数をビュー呼び出し可能オブジェクトとして使用していますが、クライアントに関連するすべてのビューを保持する個別の client.py ビュー ファイルを作成したとしましょう。何らかの方法でclients.pyファイルからコントローラー全体のコンテキスト変数のようなものを設定する方法はありますか? このようにして、各ビューの辞書で返すことなく、テンプレートのコンテキストに mainactions 変数を設定することができます。