因此,在我的Django項目中,我有幾個不同的應用程序,每個應用程序都有自己的模型,視圖,模板等。使這些應用程序進行通信的好方法(「Django」)是什麼?跨應用程序使用django模型?
一個具體的例子是會議應用程序,它有一個會議模型,我有一個家庭應用程序,我想在主頁上顯示前5個會議。
Home應用程序的視圖是否僅查詢會議應用程序的模型?
感覺就像是穿過一些線,在Django中可能會有更多的去耦方式來做這樣的事情。
任何幫助非常感謝!
因此,在我的Django項目中,我有幾個不同的應用程序,每個應用程序都有自己的模型,視圖,模板等。使這些應用程序進行通信的好方法(「Django」)是什麼?跨應用程序使用django模型?
一個具體的例子是會議應用程序,它有一個會議模型,我有一個家庭應用程序,我想在主頁上顯示前5個會議。
Home應用程序的視圖是否僅查詢會議應用程序的模型?
感覺就像是穿過一些線,在Django中可能會有更多的去耦方式來做這樣的事情。
任何幫助非常感謝!
在某些時候,您的應用程序將必須結合才能完成任何工作。你無法解決這個問題。
是的,我有點想。謝謝。 – 2010-01-13 04:18:44
家庭應用程序的視圖是否應該查詢會議應用程序的模型?
是的,就是這麼做的。如果你真的想解耦的東西,你可以讓你的應用程序使用通用的外鍵和某種通用的模板系統,但是沒有什麼好的理由,除非你的家用應用程序的宏偉計劃是可插拔的,一堆其他不同的Django應用程序。
編寫緊密耦合的Django應用程序非常簡單,編寫分離的Django應用程序非常困難。除非你有理由去解決,否則你會爲自己節省很多工作(和快樂!)。
「編寫緊密耦合的Django應用程序非常簡單,編寫分離的Django應用程序非常困難」 - 我聽到你在這裏說的話......「除非你有理由去解決,否則你會拯救你自己很多工作「 - 這難道不違背健全的軟件工程原則,即儘可能將系統保持鬆散耦合(首先)? – 2010-04-26 16:13:21
是的。我認爲這是一個設計特點。所有模型共享一個後端,所以你必須做額外的工作才能在不同的應用程序中擁有兩個同名的模型。
項目不能共享模型
如果是我,我會做一個模板標籤在會議應用產生所需的輸出,包括家庭中的應用程序的模板,模板標籤。
這樣,您只能將它們耦合到MVC的視圖部分,並且在會議應用程序中更改模型時可以更輕鬆地進行維護。
要實現脫鉤儘可能,
你需要有一個項目的具體應用,它完成全部彼此之間的掛鉤的東西。
使用來自模型的信號在分離的應用程序中創建新模型有所幫助。但是這樣做太多了,是愚蠢的。
對於您的具體示例,我將使用Django templatetag。
在Meetings應用程序中有一個templatetag「display_top_meetings」,並從索引模板中用{{ display_top_meetings 5 }}
調用它,首先加載它。
你可以閱讀更多關於templatetags這裏:
Django Official documentation about TemplateTags
B-List's article on writting 'better template tags'
我希望這幫助!
[Django應用程序之間共享模型]的可能重複(http://stackoverflow.com/questions/4137287/sharing-models-between-django-apps) – 2014-04-02 19:54:29