動的に生成されたコンテンツのブロックをdjangoテンプレートに入れるにはどうすればよいですか?
-
06-07-2019 - |
質問
Twitterのステータスやおいしいタグなどをdjangoテンプレートに含めたい。
これらのことは動的ですが、定期的です。これはどのように行われますか?
解決
これを処理する方法はいくつかあるため、自分の個人的なスタイルや要件に最も適した方法を選択できます。
-
テンプレートコンテキスト変数:Alexが答えたように、すべてのビューで作成されたすべてのテンプレートのコンテキストに含まれるコンテキスト変数にコンテンツを入れることができます。 Djangoは、これを自動的に行うメカニズムを提供します。これは、コンテキストプロセッサ。長所:非常に簡単です。短所:クライアントブラウザーで新しいコンテンツを動的に更新しません。
-
AJAX動的ロード:AlexとDaveが述べたように、AJAXメソッドを使用してコンテンツを動的にロードできます。 jQueryを使用する例として、テンプレートにプレースホルダーを
<div id="twitterfeed"></div>
のように配置し、テンプレートのjavascriptブロックに$("#twitterfeed").load("{% url twitterfeed %}");
を配置します。ここでtwitterfeed
はurls.pyで指定されたURLです。長所:ブラウザーを動的に更新します。短所:Javascriptを知らない場合は注意が必要です。 -
包含タグ:Djangoは、包含タグは、基本的に動的コンテンツをレンダリングできるカスタムテンプレートタグです。ある意味では、コンテキスト変数に似ていますが、コンテンツを生成するコードは、すべてのビューで呼び出されるのではなく、テンプレートでカスタムテンプレートタグを使用する場合にのみ呼び出される点が異なります。別の利点は、コンテンツが独自のテンプレートから生成されることです。もちろん、通常のコンテキスト変数を使用してこれを実行できますが、包含タグを使用するほどクリーン(IMHO)ではありません。長所:非常に簡単でクリーン。短所:クライアントブラウザーで新しいコンテンツを動的に更新しません。
他のヒント
最も単純なアプローチは、テンプレートで{{ mycontent }}
を使用し(動的に生成されたコンテンツを表示する場所)、テンプレートのレンダリングに使用するコンテキストでmycontent
とその値の対応を設定することです。 djangoのテンプレートの最も基本的な部分。
つまり、Ajaxサポートが必要な場合、つまり、ページ上のJavascriptが、サーバーがいつでも欲しいコンテンツに応じてそのようなコンテンツを継続的に更新するということであれば、 dojango 、Dojo / Django統合プロジェクト-DojoとDjangoがそれぞれ独自のバージョン(バージョンではない)ほど完全には成熟していない0.4まだ)、しかしそれは既に使用可能で有用です。
一般的な手法は、生成されたコンテンツにプレースホルダーdivを残し、ページに含めるJavascriptからのAJAX呼び出しを介してクライアント側でdivを埋めることです。
これにより、個別の動的ビットを持つキャッシュ可能な(高速読み込み)プライマリページを使用できるという利点が得られます。動的ビットをどの程度ライブで使用するかに応じて、より短い期間キャッシュすることもできます。