質問
私は django ビューを持っており、このビューは ajax 呼び出しで非同期に設定されるテーブルを返します。
設計の観点から、どれに従えばよいでしょうか。
- ajax 経由で呼び出される django ビューは、各セルの html マークアップを含むテーブルの内容を json 応答として返します。JavaScript コールバック ハンドラーは内容を取得し、そのままテーブルのセルに挿入します。
- ajax 経由で呼び出される django ビューは、テーブルに何を入れる必要があるかについての純粋なデータを、やはり json 応答として返します。非同期 JavaScript コールバックはデータを取得し、適切なマークアップでフォーマットしてテーブルに入れます。
言い換えれば、セルの内容のマークアップ形式の責任は誰が負うべきなのでしょうか?ビューかJavaScriptか?
ビューはすでにマークアップされたコンテンツを返すので、私は最初のことを言いたくなるでしょう。マークアップされたコンテンツを含む json が返される場合、大きな違いはありません。
あなたの見解を聞きたいです。
正しい解決策はありません
他のヒント
あなたがテーブル全体を移入している場合は、独自のテンプレートで、あなたのテーブルを置き、アヤックス/ JSONを経由して、テーブルのHTMLを返すことができます。
あなたはテーブルテンプレートを含めるために、オリジナルのテンプレートを編集する必要があります
{% include "myapp/_table.html" %}
とビューで、あなたのjavascriptがで代用しますJSON変数としてレンダリングテンプレートを返します
return { 'table': render_to_string("myapp/_table.html", context) }
このアプローチは、あなたが常にテーブル全体を更新したい良いですが、テーブルのレンダリングは、完全なコンテキストを必要としません。私は確かにパフォーマンスがどのようなものであるかないんだけど、あなたは一度だけあなたのテーブルを定義するためには、ページの一部を更新するクリーンな方法です。
これは(それほど頻繁に)依存します。
データはここでしか、今要求された場合は、、ちょうどそれがすでに標準ビューをレンダリングされたテンプレートの同じセットで、サーバー側でレンダリングできるようになりやすい簡単かつ少ないエラーになります。
あなたは、データが(オートコンプリートフィールドのような)他の場所で必要とされるであろうところ、それはJavaScriptが仕事をして、きれいな、再利用可能なJSONエクスポートを作成できるようにする方が良いだろう、しかし、ユースケースを考えることができれば。
これらのオプションはすべての他の回答に追加し、最終的にそれが決定するのはあなた次第です。
などジャンゴとしてA MVP のシステムでは、ビューは、どのようなデータを決定します示され、プレゼンターは、それが表示されるべきかを決定する必要があります。それはそうするintractably難しいことを証明しない限り、そのためのJavaScriptの書式の大部分を行う必要があります。
また、として一部の人々によって呼び出され、Unabstrusive JavaScriptを練習する良いですHijaxする
だから、あなたが最初の標準ページを持って、特定のジャンゴ・テンプレートブロック内のテーブルとページの残りの部分と一緒にプレゼントテーブル、。
そのあなたはこれをしたら、あなたはあなただけあなたが必要なのdivにクライアントにロードすることができますAJAX応答で必要なテーブルの一部を取得するので、「AJAXない場合は」内Djangoのテンプレートの一部を拡張して含めることができます。
これはJavaScriptで、サーバーとクライアントで一度に二度一度マークアップを維持するために不必要かつ冗長である。
それゆえ、私は、サーバーrederingの最初のオプションを、好むだろう、とクライアントのみレンダリングされたHTMLをロードします。
私は前にこれを数回遭遇してきた、と私は一般的に後者を選ぶ。ここで、ビューに戻り、純粋なJSONます。
しかし、あなたが選択したアプローチは、間違いなく、そのうちの一つのデバイスをターゲットに(およびそのCPU /ネットワークの制約)され、いくつかの要因に依存しなければなりません。純粋JSONは、一般的により小さいペイロードをもたらすので、モバイルデバイス用の最適であってもよい。
それはまた、あなたのコンテンツのHTMLとJSONの両方のバージョンを公開しても意味があります。あなたのサイトのためのいくつかの点で非常に軽量なAPIを作成するために探しているなら、これは特に便利です。
最後に、あなたは、このようなジョンResig氏のマイクロテンプレートのようライブラリを使用することができますまたはクロージャテンプレートは、クライアント側のHTMLの生成を簡素化するためにを。
私は最初の選択肢、正弦それはユーザーのためのより多くの長所を提示して行くだろう:すぐにページが読み込まれる(非同期呼び出しのためノーウェイト)、何のJSは、(例えば、モバイルデバイス用)
必要ありません