2012-02-25 70 views
3

我是新來的Django和相當困惑的第三方應用程序是如何最好的集成。在我對DRY的(可能是天真的)解釋中,我想盡量減少複製/粘貼不僅我自己的代碼而且其他人的代碼,所以我很滿意,例如,使用contrib.auth的模式主要是黑色如果我需要auth.User的附加信息(通過用UserProfile對象或繼承來擴展auth.User)。這就是我想象的,我也會使用大多數第三方應用程序。集成第三方應用程序的Django和模板

不過,我很快就發現,這是很困難的,所以現在我已經辭職,讓所有我的生活我的項目文件夾內的第三方應用程序,基本上都是以最小的變化整個副本的「副本」。最後一根稻草是我想添加一個基本的博客(我在django-basic-blog上定過的),並且只需要更改一個模板,並且我想沒有比在項目中使用該應用程序副本更好的解決方案單個模板已更改。

我的問題:

    在我需要改變只是一個單一的模板,這種特定的情況下
  • ,就是這個(複製整個應用程序在)我能做到的最好?如果我只需要改變單一的模式,我可以保持第三方應用恭敬地完整,在我自己的應用程序做一個模型繼承...一般
  • ,這種做法我的項目下複製應用程序和修補每一個的一點點感覺瘋狂浪費和骯髒。這也感覺,如果我使用的是經常更新的第三方應用程序,同步更改將會很麻煩。我應該只是學會愛炸彈,還是有一些明顯的架構模式/ Django提供的幫助,我錯過了?

回答

5

您不應該修改第三方模塊的代碼,因爲它很難跟蹤更改,並且會將相同的代碼複製到許多項目中,導致混亂。典型的解決方案是在你的Python路徑中只有一個第三方模塊的版本,而不是在你的項目的目錄中。這個單一的軟件包可以被你的所有項目重複使用。需要對模板

但是不同的方法,因爲他們經常需要在每個項目的基礎上進行修改。這就是爲什麼Django自帶settings.TEMPLATE_DIRSsettings.TEMPLATE_LOADERS

TEMPLATE_DIRS指定包含模板文件的目錄列表。 TEMPLATE_LOADERS指定用於加載模板的類。裝載程序將按照它們的定義使用,並且目錄將按照它們的定義進行遍歷。因此,您可以首先在項目目錄中查找模板,並在其他模塊中查找模板作爲後備。

所以基本上你不需要整個Python模塊複製,以改變一個模板。只需複製第三方模塊的模板目錄,甚至只需複製要更改的單個模板即可。如果你將放在正確的地方,並添加路徑在TEMPLATE_DIR Django將使用它。

+0

啊。謝謝。這完全回答了我的第一個問題。 – yanzhang 2012-02-25 17:59:18

+0

另外,從您的迴應中,您似乎暗示幾乎總是有一種方法來使用第三方模塊而不明確更改其代碼。現在讓我嘗試猜測你已經教給我關於模板的事情:對於每個第三方應用程序「TheirApp」來說,我應該創建一個「MyApp」目錄,在這裏我可以從TheirApp導入/擴展模型和視圖,創建/模板(並確保TEMPLATE_LOADERS中的排序是正確的),並將這兩個應用程序和MyApp添加到設置中。這是正確的模式嗎? – yanzhang 2012-02-25 18:03:21

+0

在你的項目中,你通常有'/ templates'目錄,你的模板在哪裏。也放置第三方模板。 – 2012-02-25 18:06:57