4

次のように、相互に含まれる複数のテンプレートがあります。

t1.html:

...
<%include file="t2.html" args="docTitle='blablabla'" />
...

t2.html:

<%page args="docTitle='Undefined'"/>
<title>${docTitle}</title>
...

そして、私がやりたいのは、t2がt1(または別のt1であるため、その名前を使用できる)に含まれていることを確認することです。ドキュメントに記載されている特定の方法は私の目に留まりませんでした。さらに別の引数(pagename ='foobar'など)を渡すこともできましたが、それはハックのように感じます。

単純な.render(blabla)呼び出しを使用してページをレンダリングすることで、これを実現する方法はありますか?

4

1 に答える 1

1

私が知る限り、mako は含まれる「親」テンプレートに関する情報を提供していません。さらに、インクルードされたファイルに渡されたコンテキストから、その情報を少しでも削除するように注意が必要です。

したがって、私が見る唯一の解決策は、CPython スタックを使用して、最も近いマコ テンプレート フレームを見つけ、そこから必要な情報を抽出することです。ただし、これは遅くて信頼できない可能性があるため、名前を明示的に渡すことをお勧めします。また、文書化されていない mako 機能にも依存しており、後で変更される可能性があります。

スタックベースのソリューションは次のとおりです。

テンプレートでは:

${h.get_previous_template_name()} # h is pylons-style helpers module. Substitute it with cherrypy appropriate way.

helpers.py で (または w/e は cherrypy に適しています):

import inspect

def get_previous_template_name():
    stack = inspect.stack()
    for frame_tuple in stack[2:]:
        frame = frame_tuple[0]
        if '_template_uri' in frame.f_globals:
            return frame.f_globals['_template_uri']

ただし、これは 't1.html' のように完全な uri を返します。必要に応じて微調整してください。

于 2010-08-01T18:16:12.647 に答える