2009-08-05 11 views
0

App_1には、このビューのビューとテンプレートがあります。他のソース(つまり他のアプリ)からこのビューに情報を追加したり変更したりすることなく情報を「集約」したいと考えています。おそらくApp_2はApp_1の見解でこの指定された領域に「こんにちはの世界」を置きたいと思っています。これを達成する最良の方法は何ですか?Djangoの他のアプリケーションのテンプレート要素を動的にインクルード

自然に信号が来ます。しかし、受信機は何を返送すべきですか?私の考えでは、App_1テンプレートには、信号を送信してテンプレートのリスト(「app_2/template.html」など)を受け取るカスタムタグが含まれており、それぞれが登録されます。しかし、inclusion_tagは各タグに対して1つのテンプレートレンダリングしかサポートしていないようです。

どのような手段がありますか?

答えて

2

私は説明したようになりましたが、デフォルトのinclusion_tagサポートはありませんでした。シグナルを送信し、テンプレート名を収集し、各テンプレートを直列にレンダリングし、結果を連結するノードを作成したカスタムタグを作成しました。これはうまくいくと思われ、インクルージョンタグシバンと同じロジックを持っています。

0

私は正しく理解したいと思っていますが、この問題に対するあなたの解決策は、2番目の文にあります。「集計」です。 App_1のビュー関数は、必要なすべてのデータを集計または収集し、コンテキスト変数を介してテンプレートに渡す必要があります。

解決する必要がある質問は次のとおりです。ビュー機能はどのようにしてを知りますか?データを集約しますか?

通常、ビュー機能は、使用する必要があるデータを知っているため、事前にコーディングされています。たとえば、イベントモデルオブジェクトをフェッチし、それらをコンテキストに渡すためにカレンダーアプリケーションをハードコードすることができます。しかし、あなたのケースでは、App_1に入ってくるデータは完全に恣意的で、以前は定義されていないようです。

あなたは信号について言及しましたが、ここで問題になるのは、信号がイベントが発生したという通知のみを送信するということです。それらは、リービング機能がデータを戻すことを可能にせず、信号を発信するコードは、すべての信号受信機が処理を終了してから処理を続けるのを待っていません。

代わりに登録システムを構築することもできます。 App_1はの何かをのリストで管理しています。 App_1のビュー機能が起動すると、そのリストにある他のアプリの「登録」項目が使用可能なデータに変わり、コンテキスト変数を介してテンプレートに渡されます。

+0

ああ、信号には戻り値があります:)これらの「リスナーからの引き出し」機能はとても便利です。とにかく、他のテンプレートをレンダリングするロジックがビュー(私が元々やっていたもの)に存在すべきではないので、とにかくマルチテンプレートinclusion_tagをコード化しました。 –

関連する問題