5

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

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

谢谢

4

3 回答 3

5

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

现在,这仅包含我对此项目的此应用程序所做的更改,并且原始产品应用程序保持不变,并且仍然可以从其他项目中正常读取。

于 2011-03-08T13:21:30.880 回答
4

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

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

然后,解决您的问题的方法是将您定制的 Django 应用程序(例如 Satchmoproduct模块)放入您的 python 路径中的某个位置,该位置将在“真正的”Satchmo模块之前检查。product

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

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

于 2011-02-28T03:00:52.310 回答
2

通常,我会说最好的办法是分叉 Satchmo 并保留一份包含您的更改的副本。

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

于 2011-02-27T20:24:51.297 回答