3

ピラミッド アプリケーションで pystache が提供するクラス ベースのビューを使用したいのですが、2 つを適切に統合する方法が完全にはわかりません。私はすでにこれを読みましが、クラスベースのビューの使用については触れていません。

クラスベースのビューを使用したい場合、pystache 用の新しいレンダラーを作成するにはどうすればよいですか? ここで誰か助けてくれませんか?

また、口ひげがどのように機能するかは既に知っていますが、python 実装 (pystache) に関する多くの情報を見つけることができないようです。誰かがここで私を正しい方向に向けることができますか?

4

2 に答える 2

3

を実装しMustacheRendererFactoryます。

class MustacheRendererFactory(object):
  def __init__(self, info):
    self.info = info

  def __call__(self, value, system):
    package, filename = resolve_asset_spec(self.info.name)
    template = os.path.join(package_path(self.info.package), filename)
    template_fh = open(template)
    template_stream = template_fh.read()
    template_fh.close()
    return pystache.render(template_stream, value)

おそらく次の場所で、コンフィギュレーターのセットアップを更新します__init__.py

def main(global_config, **settings):
  config = Configurator(settings=settings)
  # ...
  # Use Mustache renderer
  config.add_renderer(name='.mustache',
    factory='myapp.mustacherenderer.MustacheRendererFactory')
  # ...

ビューで使用します。

@view_config(route_name='myview', renderer='myapp:templates/notes.mustache')
def my_view(request):
  # ...
于 2012-06-05T10:52:34.797 に答える
1

ピラミッドでは、レンダラー ビューの引数は文字列であり、クラスにすることはできません。したがって、一概には言えません

@view_config(route_name='someroute', renderer=MyClassBasedView)

最も簡単な解決策は、レンダラーを手動で呼び出すことです。

return Response(pystache.render(ViewClass))

本当にピラミッド レンダラー システムを使用したい場合は、「クラスへのドット パス + 拡張子」という形式の偽のレンダラー文字列を使用できます。レンダラー ファクトリは、ドット パスを解決してクラスを取得し、レンダラーを返します。

ピラミッドでpystacheクラスベースのビューをどのように使用するかを理解していないと言わざるを得ません。値を返すメソッドを使用してクラスを定義することは、辞書を返すよりも複雑に思えます。また、ピラミッド ビューで計算するのではなく、これらのメソッドで値を計算することで、コードがより複雑になる可能性があります。ただし、継承には、私が考慮していない利点がいくつかある可能性があります。


pystache に関しては、ドキュメントはpypi ページに限定されているようですが、コードはきれいで読みやすいです (質問に答える前にざっと目を通しました)。

于 2012-06-04T14:21:21.033 に答える