2010-12-03 9 views
1

ページの一部に読み込みに時間がかかる複雑なページがあります。私は最初のページが読み込まれた後、AJAHのアプローチとjQueryを使ってフラグメントをロードすることを考えていました。それから私はそれが非常に共通の問題であるはずであることを認識した{%includeajax "sometemplate.html"%}のようなものはどうですか?Django - Ajax/Ajahを使用したページフラグメントの読み込み

これは、AJAH/AJAXを使用して「sometemplate.html」をロードすることを意味します。クールなタグではないでしょうか?何か案は?

私はこれを実装する方法を知っています。このような再利用可能なタグを持つとよいでしょう。これを達成するための他の簡単な方法について知っていますか?

おかげ

答えて

1

私はこれを行うためのミドルウェアやテンプレートタグを作った:

{% delayed_block big_table %} 
    Real content. It will be loaded by Javascript at document.ready event. 
{% delayed_stub %} 
    Stub content that is rendered immediately. 
{% enddelayed_block %} 

ページがロードされるときには、JavaScriptの作品は特別なクラスを通知し、サーバーからそれを要求し、?partial=big_tableパラメータを指定して要求を行います。 big_tablepartialのパラメータにある場合、このブロックは実際のコンテンツをレンダリングします。ミドルウェアは出力をキャッチし、このブロックのみを抽出してJSONでラップします。その後、Javascriptモジュールは適切な場所に配置します。

このプロジェクトの名称はdjango-partial-pageです。そのジャンゴ部分は卵、Javascriptモジュールはexample/media/js/partial.jsです。

+0

それは素晴らしいですが、私はそれを見てみましょう。それはまさに私が探していたものです。 – Tomas

0

私はそれがurlのスタイルではなく、テンプレートのビューを指して作ると思います。テンプレートタグは、ビューに送信できる偽のHttpRequestを生成し、テンプレートの応答の内容を含めることができます。

+0

ビューに向けると意味があると思います。なぜHttpRequestを偽造するのですか?私は、タグを取得し、ビューの内容(フラグメント)を含めるJavaScriptコードを生成することをお勧めします。多分、私たちはお互いを理解していないということを意味します。 – Tomas

+0

JavaScriptを生成することは可能です(必ずしも単純ではない場合もありますが)、それを表示するために*サーバーを別のラウンドトリップする必要があることを意味します。あなたはすでにサーバー上にいるので、今すぐ入手することもできます。 –

+0

フラグメントをレンダリングするのに使われるデータを取得するのに時間がかかるため、非同期的に取得したいということです。私はユーザーが2〜3秒待つことを望んでいません。私はページをロードしてから、そのページの断片を得るために追加の旅行をします。 – Tomas

関連する問題