Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨应用程序使用django模型?_Django_Django Models_Django Apps - Fatal编程技术网

跨应用程序使用django模型?

跨应用程序使用django模型?,django,django-models,django-apps,Django,Django Models,Django Apps,因此,在我的Django项目中,我有几个不同的应用程序,每个应用程序都有自己的模型、视图、模板等。让这些应用程序通信的好方法(“Django”方式)是什么 一个具体的例子是一个会议应用程序,它有一个会议模型,我有一个主页应用程序,我想在主页上显示前5个会议 Home应用程序的视图是否应该只查询Meetings应用程序的模型 感觉这是跨越了一些界限,在Django中可能有一种更为解耦的方式来完成类似的事情。在某个时候,为了完成任何工作,您的应用程序都必须进行耦合。你不能回避这个问题 Home应用程

因此,在我的Django项目中,我有几个不同的应用程序,每个应用程序都有自己的模型、视图、模板等。让这些应用程序通信的好方法(“Django”方式)是什么

一个具体的例子是一个会议应用程序,它有一个会议模型,我有一个主页应用程序,我想在主页上显示前5个会议

Home应用程序的视图是否应该只查询Meetings应用程序的模型

感觉这是跨越了一些界限,在Django中可能有一种更为解耦的方式来完成类似的事情。

在某个时候,为了完成任何工作,您的应用程序都必须进行耦合。你不能回避这个问题

Home应用程序的视图是否应该只查询Meetings应用程序的模型

是的,就是这样做的。如果你真的想把事情解耦,你可以让你的
Home
应用程序使用通用外键和某种通用模板系统,但这并不是一个很好的理由,除非你有一个宏伟的计划,你的家庭应用程序是可插拔的,并与其他一些不同的Django应用程序一起工作


编写紧密耦合的Django应用程序非常容易,而编写解耦的Django应用程序非常困难。除非你有理由,否则不要脱钩,这样你会为自己节省很多工作(和幸福!)。

是的。我认为这是一个设计特点。所有型号都共享一个后端,因此在不同的应用程序中使用两个同名型号需要做额外的工作


项目不应共享模型

如果是我,我会在您的会议应用程序中制作一个模板标记,生成所需的输出,并将该模板标记包含在主应用程序的模板中


这样,您只需在MVC的视图部分耦合它们,如果您在会议应用程序中更改模型,则更易于维护。

为了尽可能实现解耦

你需要有一个特定于项目的应用程序,它可以完成彼此之间的所有连接


使用来自模型的信号在解耦的应用程序中创建新模型会有所帮助。但是这样做太多是愚蠢的。

对于您的特定示例,我将使用Django模板标记

在会议应用程序中使用templatetag“display_top_meetings”,并使用索引模板中的
{{display_top_meetings 5}}
调用它,首先加载它

您可以在此处阅读有关templatetags的更多信息:


我希望这有帮助

“编写紧密耦合的Django应用程序非常容易,而编写非耦合的Django应用程序非常困难”——我听到了你在这里说的话。。。“除非有理由,否则不要解耦,这样可以节省大量工作”-这难道不违背让系统尽可能松耦合(首先)的良好软件工程原则吗?可能重复