2010-02-12 49 views
2

比方說,我有3個Django的應用,應用國家,應用社會和應用金融Django的主詳細查看插件

國家是一個'主導航'的應用程序。它在「索引」視圖中列出所有國家,並在其「詳細信息」視圖中顯示每個國家的詳細信息。

每個國家的詳細信息包括他們的社交細節(來自社交應用)和他們的財務詳情(來自金融應用)。

社會和經濟都有一個細節視圖(每個國家)

有一種優雅的方式在這些子詳細意見納入各國提供的主詳細信息視圖的「即插即用」?因此,對於每個國家的詳細信息頁面,我會看到2個選項卡,顯示該國的社交和財務詳情。

+0

您的子細節視圖是否需要將業務邏輯應用於它們?否則,不能僅僅使用fk關係在模板中呈現細節,例如{{country.financial.foo}}?即使需要業務邏輯,您也可以將其推送到模板標籤中。您可能需要詳細說明。 – michael 2010-02-12 06:28:43

+0

如果可能,我寧願嵌入視圖而非模板。 – jameszhao00 2010-02-12 09:23:54

回答

2

2常見解決方案,我用了這個問題:

部分模板:
渲染創建模板「社會」和「金融」,不從視圖需要的東西,除了對象它正在開發(並使用對象函數或模板標籤來渲染它)。 那麼你可以很容易{%include%}它(並首先設置需要的變量)。
此部分視圖不會呈現完整的HTML頁面,而只會顯示您希望使用的單個DIV或其他HTML元素。如果您還需要「僅限社交」頁面,則可以創建一個呈現標題的頁面,然後包含部分模板。您可以使用像_template.html這樣的慣例作爲部分模板,而template.html作爲常規模板。

AJAX:
讓你的 「社會」 和 「金融」 的觀點意識到被稱爲XMLHTTPRequest的(request.is_ajax())。如果他們是,他們只返回一個DIV元素,沒有周圍的所有HTML。這樣,您的母版頁就可以在沒有它的情況下渲染,並且即時添加該內容。
AJAX方式有幾個優點:您不會像整個頁面一樣在同一個請求上呈現插件視圖,所以如果您有很多這些插件視圖,主頁面加載速度會更快,並且您可以擁有一個智能JavaScript只選擇相關的插件視圖要求。
另外,您可以使用普通視圖在模板中生成所需的數據(在「部分模板」方法中,您無法真正做到這一點)。