2013-05-05 106 views
1

我正在Django項目和開發過程中工作,我創建了一個應用程序,我相信它可能在其他項目中很有用。我想我已經開發了一個相當模塊化的應用程序,但只有一個方面。這是這個問題的目標:模板。Django模塊化應用程序模板的最佳策略

就我而言,我的一個頁面生成一個表格,並儘可能保持乾淨,我沒有添加任何CSS,div或任何東西。只需乾淨的HTML。現在,我如何在其他項目中使用這個應用程序,使這個表看起來很容易?你知道,通常的CSS樣式甚至JS(例如表格重新排序)。我認爲解決方案是在原始應用程序代碼中的所有位置添加{%blocks%},但這似乎不合適。

有什麼建議嗎?

+0

你有用於生成表的模板中的代碼,你想要在其他項目中使用它嗎? – rjv 2013-05-05 18:08:02

+0

呃...是的。但是,從你的問題的口氣來看,似乎我不應該這樣做。 :)我的希望是製作一個完全可插入的應用程序關於它的模板。 – Rodrogo 2013-05-05 18:12:23

+1

@Rodrogo:你無法「讓你的應用程序完全插入其模板」,因爲你無法知道某個項目的基本模板將如何構造,將定義哪些塊等等。你可以做的最好的事情是提供最簡單的工作模板和視圖上下文的良好文檔(包括可能來自上下文處理器的內容),以便您的應用程序的用戶可以輕鬆覆蓋它們。 – 2013-05-05 18:19:34

回答

2

wrt /可重複使用的應用程序,通常的模式是在應用程序中(appname/templates/appname /)提供最少的工作模板,並在項目的模板目錄中以每個項目爲基礎重寫它們。模板實際上是特定於項目的,並且是「集成」層之一,因此您無法提供一種適合所有人的模板。

2

要按照您在評論中說的創建可插入應用程序,可以在應用程序內創建一個模板目錄,例如app/templates,而不是template_dir設置中的目錄。

在模板中,使用擴展爲繼承可能因站點而異的基本html文件。

在模板呈現表

table.html

{% extends "base.html" %} 
{% block content %} 
{% include "cleantable.html" %} 
{% endblock %} 

base.html

<html> 
project specific CSS 
project specific JS 
<body> 
{% block content %} 
{% endblock %} 
</body> 
</html> 

所以實際上你的項目結構將作如下

project 
    | 
    |---pluggable 
    |  | 
    |  |--templates 
    |  |  | 
    |  |  |---cleantable.html 
    |  |  | 
    |  |  |---table.html 
    |  |  
    |  |--views.py <renders pluggable templates> 
    | 
    |---templates<site specific templates> 
    | | 
    | |---base.html<site specific design> 
    | 
    |---<other apps>