所以在我的Django项目中,我有几个不同的应用程序,每个应用程序都有自己的模型,视图,模板等。让这些应用程序进行通信的好方法(“Django”方式)是什么?
一个具体的例子是会议应用程序,它有一个会议模型,我有一个家庭应用程序,我想在主页上显示前5个会议。
主应用程序的视图是否只是查询会议应用程序的模型?
感觉就像穿过某条线一样,在Django中可能会有一种更加去耦合的方式来做这样的事情。
答案 0 :(得分:17)
在某些时候,您的应用将必须结合才能完成任何工作。你无法解决这个问题。
答案 1 :(得分:3)
尽可能实现脱钩,
你需要一个特定于项目的应用程序,它可以完成彼此之间的所有连接。
使用模型中的信号在分离的应用程序中创建新模型有助于。但是做太多这件事,都是愚蠢的。
答案 2 :(得分:1)
是的,这就是它的完成方式。如果你真的想要解耦一些东西,你可以让你的主应用程序的视图是否只是查询会议应用程序的模型?
Home
应用程序使用通用外键和某种通用模板系统,但这并不是一个很好的理由,除非你有你的家庭应用程序的宏伟计划可插拔并与许多其他不同的Django应用程序一起使用。
编写紧密耦合的Django应用程序非常简单,编写分离的Django应用程序非常困难。除非你有理由,否则不要解耦,你将为自己节省大量的工作(和快乐!)。
答案 3 :(得分:1)
如果是我,我会在你的会议应用中制作一个模板标签,产生所需的输出,并在家庭应用的模板中包含该模板标签。
通过这种方式,您只能将它们耦合到MVC的View部分中,并且如果您在会议应用中更改模型,则可以更轻松地进行维护。
答案 4 :(得分:1)
对于您的具体示例,我将使用Django templatetag 。
在会议应用中添加模板标签“display_top_meetings”,并使用索引模板中的{{ display_top_meetings 5 }}
进行调用,然后先加载它。
您可以在此处阅读有关模板标签的更多信息:
Django Official documentation about TemplateTags
B-List's article on writting 'better template tags'
我希望这有帮助!
答案 5 :(得分:0)
是肯定的。我认为这是一个设计特色。所有型号都共享一个后端,因此您需要做额外的工作才能在不同的应用程序中使用两个具有相同名称的模型。
项目不应共享模型