1

これは私がカメレオンテンプレートにマクロをロードするために Pyramid で使用するいくつかのコードです:

@subscriber(BeforeRender)
def add_base_templates(event):
    """Define the base templates."""
    main_template = get_renderer('../templates/restaurant.pt').implementation()
    event.update({ 'main_template': main_template })

Pyramid なしでどうすれば同じことを達成できますか? たとえば、次のコードで:

from chameleon import PageTemplateFile

path = os.path.dirname(__file__)
lizard = PageTemplateFile(os.path.join(path, '..', 'emails', template+'.pt'))
html = lizard(**data)
4

1 に答える 1

1

コードの機能を見てみましょう。ピラミッドの外部でマクロを使用するために必要なのは、これを複製することだけです。

  1. ピラミッドを呼び出すと、基本的に、正しいテンプレートパスがロードされ.implementation()たインスタンスを取得することになります。PageTemplateFile

  2. イベントではBeforeRender、ビューからdict応答を変更し、add_base_templatesイベントハンドラーに。という名前の新しいエントリを追加しますmain_template

main_templateこれら2つを組み合わせて、独自のコードで同じ効果を取得し、テンプレートを呼び出すときにマクロテンプレートを渡しますlizard

from chameleon import PageTemplateFile

path = os.path.dirname(__file__)
main_template = PageTemplateFile(os.path.join(path, '..', 'templates', 'restaurant.pt'))
lizard = PageTemplateFile(os.path.join(path, '..', 'emails', template+'.pt'))
html = lizard(main_template=main_template, **data)

本当に、これですべてです。

于 2012-07-28T20:04:02.293 に答える