如何正确覆盖Django中的应用程序?

时间:2011-02-27 19:45:21

标签: python django satchmo

我正在运行Satchmo。有很多应用程序,我已经更改了产品应用程序中的一些来源。

所以我的问题是如何正确覆盖它,因为更改是特定于站点的。我是否必须复制整个Satchmo框架并将其放入我的项目中,或者我可以将其中一个应用程序复制出来并将其放入 Satchmo>应用程序>产品中? (有点像模板)

由于

3 个答案:

答案 0 :(得分:5)

我所做的工作是复制我已更改的应用程序。在这种情况下 satchmo \ apps \ product 。 我将应用程序复制到我的项目文件夹中 修改了我的 setting.py INSTALLED_APPS'product','myproject.product',

现在,我只对此项目的应用程序进行了更改,并保持原始产品应用程序不受影响,并且仍然可以正常从其他项目中读取。

答案 1 :(得分:3)

当你在INSTALLED_APPS文件中向settings.py添加'Django App'时,你告诉Django在你的“python路径”上存在一个带有该名称的可导入python模块。您可以通过查看sys.path中存储的列表的内容来查看您的python路径。

每当Python(在本例中为Django)尝试导入模块时,它会按顺序检查sys.path 中列出的每个目录,当它找到与给定名称匹配的模块时停止。

您的问题的解决方案是将您的自定义Django应用程序(例如Satchmo product模块)置于您的python路径中的某个位置,该位置将在之前检查 “Satchmo product模块。

因为我不知道你的目录结构如何布局我在这里基本上是猜测,但在你的情况下,听起来你有像/satchmo/apps/这样的Satchmo应用程序和你的项目在/my_custom_path/my_project/。在这种情况下,您可能希望将自定义的product模块添加到/my_custom_path/my_project/product/。因为Django settings.py文件所在的路径始终是首先检查,这意味着将首先找到您自定义的product模块并导入而不是内置的Satchmo之一。

仅供参考:要检查并查看Satchmo安装检查模块运行python manage.py shell目录的顺序,然后在提示符中执行import sys; print sys.path

答案 2 :(得分:2)

通常情况下,我会说最好的事情是分叉Satchmo并保留一份副本。

如果您愿意使用python路径,请确保您的应用程序目录显示在另一个(默认)目录之前。根据我的测试,如果您有两个名称相同的应用/模块,则会使用找到的第一个。