所以在我的 Django 项目中,我有几个不同的应用程序,每个应用程序都有自己的模型、视图、模板等。让这些应用程序通信的好方法(“Django”方式)是什么?
一个具体的例子是一个会议应用程序,它有一个会议模型,我有一个主页应用程序,我想在主页上显示前 5 个会议。
主页应用程序的视图是否应该只查询会议应用程序的模型?
感觉好像越界了,在 Django 中可能有一种更解耦的方式来做这样的事情。
所以在我的 Django 项目中,我有几个不同的应用程序,每个应用程序都有自己的模型、视图、模板等。让这些应用程序通信的好方法(“Django”方式)是什么?
一个具体的例子是一个会议应用程序,它有一个会议模型,我有一个主页应用程序,我想在主页上显示前 5 个会议。
主页应用程序的视图是否应该只查询会议应用程序的模型?
感觉好像越界了,在 Django 中可能有一种更解耦的方式来做这样的事情。
在某些时候,您的应用程序必须耦合才能完成任何工作。你无法解决这个问题。
尽可能实现解耦,
您需要有一个特定于项目的应用程序,它可以完成彼此之间的所有连接。
使用来自模型的信号在解耦的应用程序中创建新模型会有所帮助。但是这样做太多,是愚蠢的。
主页应用程序的视图是否应该只查询会议应用程序的模型?
是的,就是这样完成的。如果你真的想解耦,你可以让你的Home
应用程序使用通用外键和某种通用模板系统,但没有一个很好的理由,除非你有宏伟的计划让你的家庭应用程序可插入并使用一堆其他不同的 Django 应用程序。
编写紧密耦合的 Django 应用程序真的很容易,而编写解耦的 Django 应用程序真的很难。除非你有理由,否则不要解耦,你会为自己节省很多工作(和快乐!)。
如果是我,我会在您的会议应用程序中制作一个模板标签,以产生所需的输出,并将该模板标签包含在家庭应用程序的模板中。
这样,您只需将它们耦合到 MVC 的视图部分,并且如果您在会议应用程序中更改模型,则更易于维护。
对于您的具体示例,我将使用 Django templatetag。
在您的会议应用程序中有一个模板标签“display_top_meetings”,并{{ display_top_meetings 5 }}
从您的索引模板中调用它,首先加载它。
您可以在此处阅读有关模板标签的更多信息:
我希望这有帮助!
是的。我认为这是一个设计特点。所有模型共享一个后端,因此您必须做额外的工作才能在不同的应用程序中拥有两个具有相同名称的模型。
项目不应共享模型