2

たとえば、3つのdjangoアプリ、アプリCountry、アプリSocial、アプリFinancialがあるとします。

国は「マスターナビゲーション」アプリです。「インデックス」ビューにすべての国が一覧表示され、「詳細」ビューに各国の詳細が表示されます。

各国の詳細には、(ソーシャルアプリからの)社会的詳細と(財務アプリからの)財務詳細が含まれます。

社会的および財政的両方が詳細ビューを持っています(各国について)

これらのサブ詳細ビューを国が提供するマスター詳細ビューに「プラグイン」するエレガントな方法はありますか?したがって、国の詳細ページごとに、その国の社会的および財務的な詳細を示す2つのタブが表示されます。

4

1 に答える 1

2

この問題に使用する2つの一般的な解決策:

部分テンプレート:
作業中のオブジェクト以外のビューからのものを必要としない「social」および「financial」をレンダリングするためのテンプレートを作成します(オブジェクト関数またはテンプレートタグを使用してレンダリングします)。そうすれば、簡単に{%include%}することができます(そして最初に必要な変数を設定します)。
この部分ビューは完全なHTMLページをレンダリングしませんが、使用したい単一のDIVまたはその他のHTML要素のみをレンダリングします。「ソーシャルのみ」のページも必要な場合は、ヘッダーをレンダリングしてから部分的なテンプレートを含めるページを作成できます。部分的なテンプレートには_template.html、通常のテンプレートにはtemplate.htmlなどの規則を使用できます。

AJAX:
「ソーシャル」ビューと「財務」ビューがXMLHTTPRequest(request.is_ajax())で呼び出されることを認識できるようにします。そうである場合、それらはDIV要素のみを返し、その周りのすべてのHTMLは返しません。このようにして、マスターページはそれなしでレンダリングし、そのコンテンツをその場で追加できます。
AJAXの方法には、いくつかの利点があります。ページ全体と同じリクエストでプラグインビューをレンダリングしないため、これらのプラグインビューが多数ある場合は、マスターページの読み込みが速くなり、スマートJavaScriptでのみ選択できます。要求する関連プラグインビュー。
また、通常のビューを使用して、テンプレートで必要なデータを生成できます(これは、Partial Templatesメソッドでは実際には実行できません)。

于 2010-02-12T08:05:10.247 に答える