セッションから JSON 値を Web アプリケーションにロードするために、distal を使用しています。ただし、最初に Chameleon テンプレートを使用してページをレンダリングするときに、任意の JSON 値を読み込んで構造を埋めたいと思います。これを行う最善の方法は何ですか?
私が現在行っていることは、テンプレートを使用してページをレンダリングし、ドキュメントの準備ができたら JavaScript を使用して JSON を要求することです。ただし、これにより読み込みが途切れます。
いくつかのビュー間で同じデータを共有できます。リクエストが AJAX 経由の場合は、json でエンコードされたバージョンのデータ ( some_data_route
) を返します。最初の html ページをレンダリングするときにこのデータもレンダリングしたい場合は、それをテンプレートに渡してそこで処理します。
@view_config(route_name='some_data_route', renderer='json')
def data_view(request):
data = load_data(request) # find the data somewhere
return {'data': data}
@view_config(route_name='some_route', renderer='some_route.html.mako')
def view(request):
data = load_data(request)
return {'data': data}
ここで、必要に応じて、テンプレートのレンダリング コードを ajax 処理コードにより似たものにするためのいくつかのトリックを行うことができます。たとえば、JSON エンコードdata
を行い、chameleon テンプレートでそのデータを AJAX コールバックに渡すことができます。これは、JavaScript が読み込まれるまで呼び出されませんが、少なくとも最初の HTTP リクエストは必要ありません。
Pyramid 1.4 には、HTML レンダリングを mako に埋め込むためのクールなトリックがあり、def
Python から直接呼び出すことができます。これにより、同じ HTML スニペットを AJAX 応答として、またはテンプレートで直接使用できます。この機能はカメレオンにもあると思いますが、確かではありません。